骑士问题

2014-11-23 23:55:32 · 作者: · 浏览: 4
/*骑士问题*/
#include 
#include 
//#include 
#include 
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>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<<":"<
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; }