题目链接:https://vjudge.net/problem/UVA-227
有一大坑,就是命令不止一行,可能分行输入!
#include <stdio.h>
#include <string.h>
#define maxn 100000
char str[5][5];
int i1,i2,ii1,ii2;
int Move(char ch) {
switch(ch) {
case 'A': ii1 = i1-1; ii2 = i2; break;
case 'B': ii1 = i1+1; ii2 = i2; break;
case 'L': ii1 = i1; ii2 = i2-1; break;
case 'R': ii1 = i1; ii2 = i2+1; break;
}
if(ii1<0 || ii1>4 || ii2<0 || ii2>4)
return 1;
else {
str[i1][i2] = str[ii1][ii2];
str[ii1][ii2] = ' ';
i1 = ii1;
i2 = ii2;
}
return 0;
}
int main() {
char com[maxn];
int cnt = 0, flag = 0, f = 0;
while(1) {
gets(str[0]);
if(str[0][0]=='Z') break;
gets(str[1]);
gets(str[2]);
gets(str[3]);
gets(str[4]);
//寻找空格位置
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(str[i][j]==' ' || str[i][j]==NULL) {
i1 = i;
i2 = j;
}
}
}
int len = 0, flag = 0;
//输入命令
while(~scanf("%c",&com[len])) {
if(com[len] != '0') len++;
else break;
}
com[len] = 0;getchar();
for(int i = 0; i < len; i++) {
int t = Move(com[i]);
if(t==1) flag = 1;
}
if(cnt) printf("\n");
printf("Puzzle #%d:\n",++cnt);
if(flag) printf("This puzzle has no final configuration.\n");
else {
for(int i = 0; i < 5; i++)
printf("%c %c %c %c %c\n",str[i][0],str[i][1],str[i][2],str[i][3],str[i][4]);
}
}
}