题意:给定图中蜂窝两点,求最短距离
思路:建坐标系,然后根据图中走的顺序把每个点的坐标求出来,然后利用坐标去求最小距离
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> const int N = 20005; const int d[5][2]={{-1,1},{0,2},{1,1},{1,-1},{0,-2}}; struct Point{ int x,y; Point(){} Point(int _x,int _y){ x=_x;y=_y; } }p[N]; int a,b; void init(){ int pn=1,x=0,y=0; p[pn++]=Point(x,y); y-=2; p[pn++]=Point(x,y); for(int i=1;i<=60;i++){ int j,k; for(j=0;j<5;j++){ for(k=0;k<i;k++){ x+=d[j][0];y+=d[j][1]; p[pn++]=Point(x,y); } } y-=2; p[pn++]=Point(x,y); for(j=0;j<i;j++){ x--;y--; p[pn++]=Point(x,y); } } } int main() { init(); while(~scanf("%d%d",&a,&b)&&a||b){ int x=abs(p[a].x-p[b].x); int y=abs(p[a].y-p[b].y); printf("The distance between cells %d and %d is ",a,b); if(y <= x) printf("%d.\n",x); else { printf("%d.\n",x+(y-x)/2); } } return 0; }
时间: 2024-12-24 07:02:56