找出曼哈顿距离最近的点

找出曼哈顿距离最近的点。从键盘顺次输入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];
}

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值