首先判斷是否起始點和終點在同一位置,這樣結果都是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; }