ZOJ Problem Set - 1091 Knight Moves
2010-02-23 15:49
405 查看
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; }
相关文章推荐
- ZOJ Problem Set - 2478 Encoding
- ZOJ Problem Set - 2947 Abbreviation
- ZOJ Problem Set - 1241 Geometry Made Simple
- ZOJ Problem Set - 2857 Image Transformation
- ZOJ Problem Set - 1712||Skew Binary
- ZOJ Problem Set - 2186 Keep on Truckin'
- ZOJ Problem Set - 2850 Beautiful Meadow
- ZOJ Problem Set - 1006 Do the Untwist
- ZOJ Problem Set - 3777
- ZOJ Problem Set - 1205 Martian Addition
- ZOJ Problem Set - 1240 IBM Minus One
- ZOJ Problem Set - 3869
- ZOJ Problem Set - 3804 YY's Minions
- ZOJ Problem Set - 2562 More Divisors 反素数
- ZOJ Problem Set - 2319 Beautiful People || sgu 199
- ZOJ Problem Set–1874 Primary Arithmetic
- ZOJ Problem Set–2104 Let the Balloon Rise
- ZOJ Problem Set - 1512 (Water Treatment Plants)
- ZOJ Problem Set - 3878 Convert QWERTY to Dvorak
- ZOJ Problem Set - 3861 ( DFS + 子集生成 + 有条件的全排列生成 )