骑士问题

/*骑士问题*/

#include <iostream>

#include <string>

//#include <fstream>

#include <queue>

using namespace std;

#define MAX 12



typedef struct _point

{

        int x;

        int y;

        int dep;

}point;



int map[MAX][MAX];

int p[][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};

point start,end;

//fstream fin;



int bfs();

int main()

{  

   //fin.open("2585.txt",ios::in);

   int times=0;

   int b;

   while(cin>>b)

   {

       if(b==-1) break;

       for(int i=0;i<12;i++)

          for(int j=0;j<12;j++)

             map[i][j]=1;

       //周围围上栅栏 

       for(int i=2;i<10;i++)

          for(int j=2;j<10;j++)

            map[i][j]=0;

       

       string a;

       for(int i=0;i<b;i++)

       {

                cin>>a;

                map[a[0]-'a'+2][(a[1]-'1')+2]=1;

       } 

  

       cin>>a;

       start.x=a[0]-'a'+2;

       start.y=a[1]-'1'+2;

       start.dep=0;

       

       

       cin>>a;

       end.x=a[0]-'a'+2;

       end.y=a[1]-'1'+2;

       

       int dep=bfs();

       if(dep)

         cout<<"Board "<<++times<<":"<<dep<<" moves"<<endl; 

       else

          cout<<"Board "<<++times<<":not reachable"<<endl;

   }

   system("pause");

   return 0;

}



int bfs()

{

    int dep=0;

    queue<point> Q;

    Q.push(start);

    while(!Q.empty())

    {

          //当前是的dep 

           for(int i=0;i<8;i++)

           {

                   point cur=Q.front();

                   if(map[cur.x+p[i][0]][cur.y+p[i][1]]==0)

                   {

                         if(end.x==cur.x+p[i][0]&&cur.y+p[i][1]==end.y)

                         {

                              end.dep=cur.dep+1;

                              return end.dep;

                         }

                         map[cur.x+p[i][0]][cur.y+p[i][1]]=1;

                         point temp;

                         temp.x=cur.x+p[i][0];

                         temp.y=cur.y+p[i][1];

                         temp.dep=cur.dep+1;

                         Q.push(temp);

                   }

           }

          

           Q.pop();         

    }

    return 0;

}


你可能感兴趣的:(问题)