紫书 习题3-5 谜题
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const char inst[] = "ABLR"; const int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int main(void) { int t = 0; char s[5][6]; char c; while ((s[0][0] = getchar()) != 'Z') { int bi = 0, bj = 0; for (int i = 0; i < 5; i ++) { for (int j = 0; j < 5; j ++) { if (!i && !j) continue; s[i][j] = getchar(); if (s[i][j] == ' ') {bi = i, bj = j;} } getchar(); } bool legal = true; while ((c = getchar()) != '0') { if (legal == false || c == '\n') continue; int k; for (k = 0; k < 4; k ++) { if (c == inst[k]) break; } if (k == 4) legal = false; else { int ni = bi+dir[k][0], nj = bj+dir[k][1]; if (0 <= ni && ni < 5 && 0 <= nj && nj < 5) { swap(s[bi][bj], s[ni][nj]); bi = ni, bj = nj; } else legal = false; } } if (++t > 1) printf("\n"); printf("Puzzle #%d:\n", t); if (legal == false) printf("This puzzle has no final configuration.\n"); else { for (int i = 0; i < 5; i ++) { for (int j = 0; j < 5; j ++) { printf("%c%c", s[i][j], j == 4 ? '\n' : ' '); } } } getchar(); } return 0; }
1 # include <iostream> 2 # include <cstdio> 3 4 using namespace std; 5 6 int main(){ 7 8 char a[5][7],t; 9 int n,m,i,j,k; 10 11 12 13 int cases = 0; 14 char modol[1001]; 15 while(gets(a[0])){ 16 17 if(a[0][0]=='Z') break; 18 19 for(i=1;i<5;i++){ 20 gets(a[i]); 21 } 22 23 24 //查找空格的位置 25 int x = 0,y = 0; 26 for(i=0;i<5;i++) 27 for(j=0;j<5;j++) 28 if(a[i][j]==' '){ 29 x=i,y=j; 30 break;//记录空格这个点 31 } 32 33 //scanf不读取\n和空格 34 int cnt = 0; 35 36 37 while(~scanf("%c",&modol[cnt])) 38 if(modol[cnt]!='0') cnt++; 39 else break; 40 /* 41 char ch; 42 while(scanf("%c",&ch)) 43 if(ch=='\n') continue; 44 else if(ch==' ') continue; 45 else if(ch!='0') { 46 modol[cnt]=ch; 47 cnt++; 48 } 49 else break; 50 */ 51 //gets与scanf("%c") getcahr 的区别 52 int flag=0, x1 = x , y1=y; 53 modol[cnt] = 0; 54 getchar(); 55 56 for(i=0;modol[i];i++){ 57 switch(modol[i]){ 58 case 'A' : x1 = x - 1;y1=y; break; 59 case 'B' : x1 = x + 1;y1=y; break; 60 case 'L' : x1 = x;y1=y-1; break; 61 case 'R' : x1 = x;y1=y+1; break; 62 } 63 64 if(x1<0||y1<0||x1>4||y1>4){ 65 flag = 1;break; 66 }else{ 67 a[x][y] = a[x1][y1]; 68 a[x1][y1] = ' '; 69 x = x1; 70 y = y1; 71 } 72 73 } 74 75 if(cases++) printf("\n"); 76 printf("Puzzle #%d:\n",cases); 77 78 if(flag){ 79 printf("This puzzle has no final configuration.\n"); 80 }else{ 81 for(i=0;i<5;i++){ 82 printf("%c",a[i][0]); 83 for(j=1;j<5;j++){ 84 printf(" %c",a[i][j]); 85 } 86 printf("\n"); 87 } 88 89 90 91 } 92 93 94 95 } 96 97 98 return 0; 99 }