如图:
@@@@@@@@
@A @@@@@@
@@@@@@B @
@@@@@@@@
一个NxM的区域中(下标均从0开始),点A(1,1)与点B(2,6)位置如图,其中A想通过上下左右四个方向移动到达B,但是目前需要5+1=6步才能走到B。于是,他在地图外圈加上四块魔镜,使得他能从地图边沿的魔镜走到地图另一侧,即能从(0,y)到达(n-1,y)或从(x,0)到达(x,m-1),反之亦然,只需要一步就能穿越魔镜。
问,给定地图大小和A,B两点位置,求A到B的最短距离。
输入格式:
第一行一个整数T,表示测试样例个数(T<20)
其余每行,第一行两个整数N、M。
第二行四个整数,Xa Ya Xb Yb,下标保证在地图范围以内。
对于5分的测试数据 (1<=N、M<=10)
对于10分的测试数据(1<=N、M<=1000)
对于15分的测试数据(1<=N、M<=1000000000000000)
输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。
输入样例:
2 4 8 1 1 2 6 4 8 0 0 3 7
输出样例:
4 2
#include<stdio.h> #include<math.h> #include<string.h> int main(){ int T; long long int m,n; long long int x1,x2,y1,y2; long long int s1,s2,s3,s4; scanf("%d",&T); while(T--){ scanf("%lld %lld",&n,&m); scanf("%lld %lld %lld %lld",&x1,&y1,&x2,&y2); s1=fabs(x2-x1)+fabs(y2-y1); s2=n-fabs(x2-x1)+m-fabs(y2-y1); s3=fabs(x2-x1)+m-fabs(y2-y1); s4=n-fabs(x2-x1)+fabs(y2-y1); long long int min=s1; if(min>s2)min=s2; if(min>s3)min=s3; if(min>s4)min=s4; printf("%lld\n",min); } }