找出曼哈顿距离最近的点。从键盘顺次输入n(1≤n≤5)个点的坐标到结构体数组struct Point points[5]里,输出其中距离点(2,3)曼哈顿距离最近的点(假定该点唯一)。根据程序已有代码,补全代码。
设计要求:
(1)定义点结构体类型struct Point,其成员包括:X轴坐标x(int型)和Y轴坐标y(int型)。
(2)定义函数int distance ( struct Point P1 , struct Point P2 )计算点p1和p2的曼哈顿距离。
注:若有两个点坐标为(x1,y1), (x2,y2),则这两点之间的曼哈顿距离为|x1- x2|+|y1- y2|,其中| |表示取绝对值。
(3)定义函数struct Point findNearest( struct Point point , struct Point points[] , int n )计算并返回points数组存储的n个点中距离point点的曼哈顿距离最近的点(假定曼哈顿距离最近的点唯一)。计算点之间的曼哈顿距离需要调用distance函数。
裁判测试程序样例:
#include<stdio.h>
/* 请在这里填写答案 */
int main(void)
{ int i , n ; struct Point points[5] , nearest , point={ 2 , 3 } ;
scanf( "%d" , &n ) ;
for(i=0;i<n;i++) scanf( "%d%d" , &points[i].x , &points[i].y ) ;
nearest=findNearest( point , points , n ) ;
printf( "距离(%d,%d)最近的点是(%d,%d)" , point.x , point.y , nearest.x , nearest.y ) ; return 0 ; }
输入格式:
输入共2行,第1行输入一个整数n
第2行依次输入n个点的坐标,对于每个点来说,X坐标在前,Y坐标在后,各数据以空格间隔
输出格式:
按照以下格式输出结果信息,实际输出时将各<>部分替换为相应数据
距离(<point的X坐标>,<point的Y坐标>)最近的点是(<最近点的X坐标>,<最近点的Y坐标>)
输入样例:
3
1 -2 3 5 5 2
输出样例:
距离(2,3)最近的点是(3,5)
参考代码:
#include<math.h>
struct Point{
int x;
int y;
};
int distance(struct Point P1,struct Point P2)
{
return abs(P1.x-P2.x)+abs(P1.y-P2.y);
}
struct Point findNearest(struct Point point,struct Point points[],int n)
{
int i,d,nearp,nearw=0;
nearp=distance(point,points[0]);//先认为第一个点和point点的距离最近
for(i=i;i<n;i++)//从第二个点开始遍历所有点
{
d=distance(point,points[i]);
if(nearp>d)//如果找到了距离更小的点,就更新一下nearp
{
nearp=d;
nearw=i;
}
}
return points[nearw];
}