有一个55的网格,其中恰好有一个格子是空的,其他格子各有一个字母,一共有四种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(分别以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出”This puzzle has no final configuration.
没什么好说的题目不难但是注意输出格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include #include #define maxn 20 #define command 10001 #define tex char a[maxn][maxn]; char s[maxn][command]; int main() { #ifdef text freopen("data.in","r",stdin); freopen("datas.out","w",stdout); #endif int blank_x,blank_y; int flag ,puzzle=1; int i,j,len2; while(1) { blank_x=0,blank_y=0; flag=1; fgets(a[0],7,stdin); if(strlen(a[0])<3&&a[0][0]=='Z') break; fgets(a[1],7,stdin); fgets(a[2],7,stdin); fgets(a[3],7,stdin); fgets(a[4],7,stdin); for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(a[i][j]==' '){ blank_x=j; blank_y=i; /*printf("%d %d",i,j);*/ } } } int q=0; for(;;){ fgets(s[q],command,stdin); int len = strlen(s[q]); if(s[q][len-2]-'0'!=0) { q++; }else{ break; } } for(i=0;i<=q;i++) { len2=strlen(s[i]); for(j=0;j<len2;j++) { if(s[i][j]=='0'|| s[i][j]=='A' || s[i][j]=='B' || s[i][j]=='L' || s[i][j]=='R') { if(s[i][j]== 'A' && blank_y!=0) { a[blank_y][blank_x]=a[blank_y-1][blank_x]; a[--blank_y][blank_x]=' '; } else if(s[i][j]=='B'&& blank_y!=4) { a[blank_y][blank_x]=a[blank_y+1][blank_x]; a[++blank_y][blank_x]=' '; } else if(s[i][j]=='L'&&blank_x!=0) { a[blank_y][blank_x]=a[blank_y][blank_x-1]; a[blank_y][--blank_x]=' '; } else if(s[i][j]=='R'&&blank_x!=4) { a[blank_y][blank_x]=a[blank_y][blank_x+1]; a[blank_y][++blank_x]=' '; } else if(s[i][j]=='0') { break; } else{ flag = 0; } } } } if(puzzle>1) { printf("\n"); } if(flag) { printf("Puzzle #%d:\n",puzzle++); for(i=0;i<5;i++) { printf("%c %c %c %c %c\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]); } } else{ printf("Puzzle #%d:\n",puzzle++); printf("This puzzle has no final configuration.\n"); } } return 0; } |