绕距#C语言
在城市道路规划中,绕距是一个很重要的概念,指的是城市中两个重要人员聚集点之间的欧几里得距离(欧氏距离)与曼德拉距离之差的绝对值。一般而言,绕距越小,则城市交通参与者在这两个地点之间所走的“冤枉路”就越小。其中,欧几里得距离(欧氏距离)表示两点间的直线距离,而曼哈顿距离指的是只沿着横平竖直的城市街道从起点到达终点的最短距离,如下图所示:
由此不难推出两种距离的公式:
两点间欧几里得距离 =(x1−x2)2+(y1−y2)2=(x1−x2)2+(y1−y2)2.
两点间曼哈顿距离 =∣x1−x2∣+∣y1−y2∣=∣x1−x2∣+∣y1−y2∣
在生活中,我们也常常想,为什么非要走横平竖直的街道到达目的地呢?如果我能乘坐直升机的话,岂不是可以直接飞过去了?实际上,这就是一种尽可能的缩小绕距的方法。
现在给出两点的坐标,求两点之间的绕距。
输入描述:
第一行包含两个个整数 x1,y1x1,y1 ( −104≤x1,y1≤104−104≤x1,y1≤104 ) ,分别表示起点的横坐标和纵坐标。
第二行包含两个个整数 x2,y2x2,y2 ( −104≤x2,y2≤104−104≤x2,y2≤104 ) ,分别表示终点的横坐标和纵坐标。
输出描述:
输出一个实数,即起点与终点之间的绕距。注意,由于浮点数存在误差,只要您的答案与标准答案之间的误差不超过 10−610−6, 您的答案就会被认为是正确的。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>int main() {int x1,y1,x2,y2,n;double m;scanf("%d %d",&x1,&y1);scanf("%d %d",&x2,&y2);n=abs(x1-x2)+abs(y1-y2);m=sqrt(pow((x1-x2),2)+pow((y1-y2),2));printf("%lf",n-m);return 0;
}