八个方向访问的bfs模板:
#include<cstdio> #include<queue> using namespace std; int map[8][8]; bool flag[8][8]; int xs,xe,ys,ye;起点和终点 int vis[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}}; struct node { int x,y,step; }; int bfs() { queue<node>q; node frist;frist.step=0;frist.x=xs;frist.y=ys; q.push(frist); flag[xs][ys]=true; while(!q.empty()) { node pre=q.front();q.pop(); if(pre.x==xe && pre.y==ye) return pre.step; for(int i=0;i<8;i++) { node pp; pp.x=pre.x+vis[i][0];pp.y=pre.y+vis[i][1]; if(!flag[pp.x][pp.y] && pp.x>=0 && pp.x<8 && pp.y>=0 && pp.y<8) { flag[pp.x][pp.y]=true; pp.step=pre.step+1; q.push(pp); } } } return 0; } int main() { char c1[2],c2[2]; while(~scanf("%s%s",c1,c2)) { memset(flag,false,sizeof(flag)); xs=c1[0]-'a';ys=c1[1]-'0'-1;//这里的数字坐标因为下标从0开始,要-1; xe=c2[0]-'a';ye=c2[1]-'0'-1; printf("To get from %s to %s takes %d knight moves.\n",c1,c2,bfs()); } return 0; }