给定平面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);
}

【运行结果】

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值