HDU1372 Knight Moves

來源:互聯網
上載者:User
                                                           Knight Moves

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4813    Accepted Submission(s): 2957

Problem DescriptionA friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboard exactly once. He thinks that
the most difficult part of the problem is determining the smallest number of knight moves between two given squares and that, once you have accomplished this, finding the tour would be easy.
Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part.

Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.
 

InputThe input file will contain one or more test cases. Each test case consists of one line containing two squares separated by one space. A square is a string consisting of a letter (a-h) representing the column and a digit (1-8) representing
the row on the chessboard.  

OutputFor each test case, print one line saying "To get from xx to yy takes n knight moves.".
 

Sample Input

e2 e4a1 b2b2 c3a1 h8a1 h7h8 a1b1 c3f6 f6
 

Sample Output

To get from e2 to e4 takes 2 knight moves.To get from a1 to b2 takes 4 knight moves.To get from b2 to c3 takes 2 knight moves.To get from a1 to h8 takes 6 knight moves.To get from a1 to h7 takes 5 knight moves.To get from h8 to a1 takes 6 knight moves.To get from b1 to c3 takes 1 knight moves.To get from f6 to f6 takes 0 knight moves.
 

SourceUniversity of Ulm Local Contest 1996
 

RecommendEddy 
解題思路:搜尋方式不同往常的廣度優先搜尋,只要搞清楚方向,直接搜尋即可,其他都交給電腦,你只要輸條件和等結果就可以了。
由於是走‘日’字型的,則有,若當前處於中間點,則有8個方向可以走。,若處於‘0’點,則有8個方向可以走(‘1’點)。

#include<cstdio>#include<cstring>#include<queue>using namespace std;int map[9][9];int n=8;int dir[8][2]={1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,1,-2,-1};     //八個方向哦char a[2][2];int sx,sy,ex,ey;struct node{  int x;  int y;  int step;};bool inmap(int x,int y){    if(x>=0&&x<n&&y>=0&&y<n)        return true;    return false;}int bfs(){    node s,e;    queue<node> q;    s.x=sx;    s.y=sy;    s.step=0;    map[sx][sy]=1;    q.push(s);    if(sx==ex&&sy==ey)        return 0;    while(!q.empty())    {        s=q.front();        q.pop();        for(int i=0;i<8;i++)     //直接走就對了        {            e.x=s.x+dir[i][0];            e.y=s.y+dir[i][1];            e.step=s.step+1;            if(inmap(e.x,e.y)&&!map[e.x][e.y])            {                if(e.x==ex&&e.y==ey)                    return e.step;                map[e.x][e.y]=1;                q.push(e);            }        }    }    return -1;}int main(){    while(scanf("%s%s",a[0],a[1])!=EOF)    {        memset(map,0,sizeof(map));        sx=a[0][0]-'a';     //儲存形式的轉換,利於數組運用        sy=a[0][1]-'1';        ex=a[1][0]-'a';        ey=a[1][1]-'1';        printf("To get from %c%c to %c%c takes %d knight moves.\n",a[0][0],a[0][1],a[1][0],a[1][1],bfs());    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.