首先判断是否起始点和终点在同一位置,这样结果都是0.ios
其后判断对角线,同行,同列的关系,来肯定最少的步数。spa
对于象要记得判断判断2步的那个状况。code
#include <iostream> #include <cstdio> using namespace std; int max(int a,int b){return a>b?a:b;} int fabs(int a){return a>0?a:-a;} int main() { int t; char str[6]; cin >> t; getchar(); int x1,x2,y1,y2; int ans[4],deltax,deltay; while(t--) { gets(str); x1 = str[0]-'a'+1; y1 = str[1]-'0'; x2 = str[3]-'a'+1; y2 = str[4]-'0'; deltax = fabs(x1-x2); deltay = fabs(y1-y2); if((deltax == 0) && (deltay == 0)) { ans[0] = ans[1] = ans[2] = ans[3] = 0; } else { ans[0] = max(deltax,deltay); if(deltax == deltay || deltay == 0 || deltax == 0)//对角线,同行,同列 { ans[1] = 1; } else { ans[1] = 2; } if(deltay == 0 || deltax == 0)//同行,同列 { ans[2] = 1; } else { ans[2] = 2; } if(deltax == deltay)//同一对角线 { ans[3] = 1; } else if(fabs(deltax-deltay) % 2 == 0) { ans[3] = 2; } else { ans[3] = -1; } } cout << ans[0] << " " << ans[1] << " " << ans[2] << " "; if(ans[3] == -1) cout << "Inf" << endl; else cout << ans[3] << endl; } return 0; }