给定平面N个点的坐标X和坐标Y求出这些点与点之间的最短距离

【例题1】编程题,给定平面10个点的坐标X和坐标Y,输出这点与点之间的最小距离。

【解题思路】
 
我们可以将这些坐标点存放到一个二维数组里面去,比如 第一个 坐标的x和y分别为points[0][0]和points[0][1]
然后我们在将前面2个坐标点的距离设置为最小距离通过循环去一次与剩下的点作比较,代码里面有详细解释如下。
 
【代码展示】
#include<stdio.h>
#include<math.h>
#define N 10

//求两点之间的距离
double distance(double x1, double y1, double x2, double y2) {
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main() {
	double points[N][N];
	for(int i=0; i<N; i++) {
		printf("第%d个点的横纵坐标",(i+1));
		scanf("%lf %lf",&points[i][0],&points[i][1]);
	}
	int p1 = 0;  //p1记录起点,假设起点就是二维数组的第一组元素
	int p2 = 1;  //p2记录终点,假设终点就是二维数组的第二组元素
	double minDistance = distance(points[p1][0], points[p1][1], points[p2][0], points[p2][1]);
	for(int i=0; i<N; i++) {
		for(int j=i+1; j<N; j++) {
			double dist = distance(points[i][0], points[i][1], points[j][0], points[j][1]);
			//如果dis的值小于minDistance的值,则更新p1和p2的位置
			if(dist < minDistance) {
				minDistance = dist;
				p1 = i;
				p2 = j;
			}
		}
	}

	printf("平面内最短距离的两点是:(%.2lf,%.2lf)和(%.2lf,%.2lf)\n",points[p1][0],points[p1][1], points[p2][0], points[p2][1]);
	printf("平面内最短距离是:%.2lf",minDistance);
}

【运行结果】

发布了200 篇原创文章 · 获赞 603 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/wyf2017/article/details/105449347