BFS+STL-queue教学级题目 #include<iostream> #include<queue> using namespace std; struct point { int x; int y; int step; }st,et; int mp[10][10]; queue<point>mv; void visit() { point pp; if(mv.front().x+1<9&&mv.front().y-2>0&&mp[mv.front().x+1][mv.front().y-2]==0) { mp[mv.front().x+1][mv.front().y-2]=1; pp.x=mv.front().x+1; pp.y=mv.front().y-2; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x+2<9&&mv.front().y-1>0&&mp[mv.front().x+2][mv.front().y-1]==0) { mp[mv.front().x+2][mv.front().y-1]=1; pp.x=mv.front().x+2; pp.y=mv.front().y-1; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x+2<9&&mv.front().y+1<9&&mp[mv.front().x+2][mv.front().y+1]==0) { mp[mv.front().x+2][mv.front().y+1]=1; pp.x=mv.front().x+2; pp.y=mv.front().y+1; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x+1<9&&mv.front().y+2<9&&mp[mv.front().x+1][mv.front().y+2]==0) { mp[mv.front().x+1][mv.front().y+2]=1; pp.x=mv.front().x+1; pp.y=mv.front().y+2; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x-1>0&&mv.front().y+2<9&&mp[mv.front().x-1][mv.front().y+2]==0) { mp[mv.front().x-1][mv.front().y+2]=1; pp.x=mv.front().x-1; pp.y=mv.front().y+2; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x-2>0&&mv.front().y+1<9&&mp[mv.front().x-2][mv.front().y+1]==0) { mp[mv.front().x-2][mv.front().y+1]=1; pp.x=mv.front().x-2; pp.y=mv.front().y+1; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x-2>0&&mv.front().y-1>0&&mp[mv.front().x-2][mv.front().y-1]==0) { mp[mv.front().x-2][mv.front().y-1]=1; pp.x=mv.front().x-2; pp.y=mv.front().y-1; pp.step=mv.front().step+1; mv.push(pp); } if(mv.front().x-1>0&&mv.front().y-2>0&&mp[mv.front().x-1][mv.front().y-2]==0) { mp[mv.front().x-1][mv.front().y-2]=1; pp.x=mv.front().x-1; pp.y=mv.front().y-2; pp.step=mv.front().step+1; mv.push(pp); } } int BFS() { st.step=0; mv.push(st); while(!mv.empty()) { if(mv.front().x==et.x&&mv.front().y==et.y)return mv.front().step; visit(); mv.pop(); } } int main() { char a,b; int m; char buf1[100],buf2[100]; while(scanf("%s %s",buf1,buf2)!=EOF) { sscanf(buf1,"%c%d",&a,&st.y); sscanf(buf2,"%c%d",&b,&et.y); st.x=a-'a'+1; et.x=b-'a'+1; memset(mp,0,sizeof(mp)); m=BFS(); printf("To get from %c%d to %c%d takes %d knight moves./n",a,st.y,b,et.y,m); while(!mv.empty()) mv.pop(); } return 0; }