骑士问题
来源:互联网 发布:python是不是脚本语言 编辑:程序博客网 时间:2024/05/17 06:16
/*骑士问题*/#include <iostream>#include <string>//#include <fstream>#include <queue>using namespace std;#define MAX 12typedef 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;}