谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)代码有问题请指出

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”


#include
#include

#include
using namespace std;
char a[6][6];
void change(char &a,char &b){
   char c=a;
   a=b;
   b=c;
}

int main(){
     int m,n;
   for(int i=0;i<5;i++)
     for(int j=0;j<5;j++){
            scanf("%c",&a[i][j]);
            if(a[i][j]==' ')
            {
                 m=i;  //行   //保存空格  位置
                 n=j;   //列
            }
        }
   //如有问题?
   char c;
   while(scanf("%c",&c)&&c!='0'){
        if((m==0)&&c=='A'){
        printf("This puzzle has no final configuration");break;
        }
       else if((m==4)&&c=='B'){
         printf("This puzzle has no final configuration");break;}
       else if((n==0)&&c=='L'){
         printf("This puzzle has no final configuration");break;}
       else if((n==4)&&c=='R'){
         printf("This puzzle has no final configuration");break;}
       switch (c){
      case 'A' : change(a[m][n],a[m-1][n]);    //上面移下来
                 m=m-1;
                 break;
      case 'B':  change(a[m][n],a[m+1][n]);
                  m=m+1;
                  break;
    case 'L':change(a[m][n],a[m][n-1]);
                 n-=1;
                 break;
    case 'R' :change(a[m][n],a[m][n+1]);
                  n+=1;
                  break;

       }
         for(int i=0;i<5;i++){
     for(int j=0;j<5;j++){
            printf("%c\t",a[i][j]);
     }
     cout<

你可能感兴趣的:(水题)