UVa

给空格子上下左右的互换操作,问最后是怎样的

注意一行的最后一个若是空格,需要自己加
注意读取时 操作可能分好多行,一定要读取到 0 为止

  1 #include <iostream>
  2 #include <cstring>
  3 using namespace std;
  4 char map[50][50],op[1000],c,tmp;
  5 int k,t,x,y,cnt; 
  6 bool flag;
  7 void fuc()
  8 {
  9     flag=1;
 10     for(int i=0;op[i]!='0';i++)
 11     {
 12         if(flag==0) break;
 13         else if(op[i]=='A')
 14         {
 15             if(x-1>=0)
 16             {
 17                 tmp=map[x-1][y];
 18                 map[x-1][y]=' ';
 19                 map[x][y]=tmp;
 20                 x--;
 21             }
 22             else flag=0;
 23         } 
 24         else if(op[i]=='B')
 25         {
 26             if(x+1<=4)
 27             {
 28                 tmp=map[x+1][y];
 29                 map[x+1][y]=' ';
 30                 map[x][y]=tmp;
 31                 x++;
 32             }
 33             else flag=0;
 34         }
 35         else if(op[i]=='R')
 36         {
 37             if(y+1<=4)
 38             {
 39                 tmp=map[x][y+1];
 40                 map[x][y+1]=' ';
 41                 map[x][y]=tmp;
 42                 y++;
 43             }
 44             else flag=0;
 45         }
 46         else if(op[i]=='L')
 47         {
 48             if(y-1>=0)
 49             {
 50                 tmp=map[x][y-1];
 51                 map[x][y-1]=' ';
 52                 map[x][y]=tmp;
 53                 y--;
 54             }
 55             else flag=0;
 56         }
 57     }
 58 }
 59 int main()
 60 {
 61     k=1;
 62     while(gets(map[0]))
 63     {
 64         if(map[0][0]=='Z'&&map[0][1]=='') break;
 65         for(int i=1;i<5;i++) gets(map[i]);
 66         for(int i=0;i<5;i++)
 67         {
 68             if(strlen(map[i])!=5)
 69             {
 70                 map[i][4]=' ';
 71                 break;
 72             }
 73         }
 74         cnt=0;
 75         while(c=getchar())
 76         {
 77             if(c<='Z'&&c>='A') op[cnt++]=c;
 78             if(c=='0')
 79             {
 80                 op[cnt++]=c;
 81                 getchar();break;  //0 之后还有一个回车需要读取!!
 82             } 
 83         }
 84         for(int i=0;i<5;i++)
 85             for(int j=0;j<5;j++)
 86                 if(map[i][j]==' ')
 87                 {
 88                     x=i;y=j; break;
 89                 }
 90         fuc(); 
 91         if(k>1) puts("");
 92         printf("Puzzle #%d:
",k++);
 93         if(flag==0) puts("This puzzle has no final configuration.");
 94         else 
 95         {
 96             for(int i=0;i<5;i++)
 97             {
 98                 for(int j=0;j<4;j++)
 99                 {
100                     printf("%c ",map[i][j]);
101                 }
102                 printf("%c
",map[i][4]);
103             }
104         }
105     }
106 }
107 /*
108 TRGSJ
109 XDOKI
110 M VLN
111 WPABE
112 UQHCF
113 ARRBBL0
114 ABCDE
115 FGHIJ
116 KLMNO
117 PQRS
118 TUVWX
119 AAA
120 LLLL0
121 ABCDE
122 FGHIJ
123 KLMNO
124 PQRS
125 TUVWX
126 AAAAABBRRRLL0
127 Z
128 */
我自倾杯,君且随意
原文地址:https://www.cnblogs.com/nicetomeetu/p/5277192.html