Solution:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; typedef struct { int x,y; } point; int main() { int count = 0; while(1) { bool flag; int i,j; char pu[6][6]= {0}; // for(i=0; i<5; i++) // for(j=0; j<5; j++) // scanf("%c",pu[5][5]); /// %c会读取回车进入字符串中 /// A--above,B--below,L--left,R--right // for(i=0; i<6; i++) // for(j=0; j<6; j++) // cin>>pu[i][j]; gets(pu[0]);if(pu[0][0]=='Z') break; gets(pu[1]),gets(pu[2]),gets(pu[3]),gets(pu[4]); count++; ///输入 if(count>1) cout<<endl; cout<<"Puzzle #"<<count<<":"<<endl; point b; for(i=0; i<5; i++) { for(j=0; j<5; j++) if(pu[i][j]==' ') { b.x=i,b.y=j; break; } } ///判断空格位置并记录 flag = true; char option; while(~scanf("%c",&option)) { if(option=='0') break; else switch(option) { case 'A': if(b.x==0) flag = false; else { pu[b.x][b.y] = pu[b.x-1][b.y]; pu[b.x-1][b.y] = ' '; b.x = b.x-1; } // cout<<b.x<<" "<<b.y<<endl; break; case 'B': if(b.x==4) flag = false; else { pu[b.x][b.y] = pu[b.x+1][b.y]; pu[b.x+1][b.y] = ' '; b.x = b.x+1; } // cout<<b.x<<" "<<b.y<<endl; break; case 'L': if(b.y==0) flag = false; else { pu[b.x][b.y] = pu[b.x][b.y-1]; pu[b.x][b.y-1] = ' '; b.y = b.y-1; } // cout<<b.x<<" "<<b.y<<endl; break; case 'R': if(b.y==4) flag = false; else { pu[b.x][b.y] = pu[b.x][b.y+1]; pu[b.x][b.y+1] = ' '; b.y = b.y+1; } // cout<<b.x<<" "<<b.y<<endl; break; default : continue; } // cout<<"continue"<<endl; } if(flag == false) cout<<"This puzzle has no final configuration."<<endl; else { for(i=0; i<5; i++) { for(j=0; j<4; j++) printf("%c ",pu[i][j]); printf("%c\n",pu[i][j]); } } getchar(); } return 0; }