【模擬】POJ 1657 Distance on Chessboard

首先判斷是否起始點和終點在同一位置,這樣結果都是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;
}
相關文章
相關標籤/搜索