代码非常清晰,考虑到所有的情况
学习这种写法
#include<stdio.h>
#include<string.h>
char str[10][10], Deal[3000];
char ch;
int ErrorFlag;
int x,y;
int Flag;
int main()
{
Flag=0;
while( (gets(str[0])) != NULL && strcmp(str[0],"Z") ){
ErrorFlag = 0;
for(int j = 0; j < strlen(str[0]); j++)
if(str[0][j] == ' ')
{
x=0;
y=j;
}
for(int i = 1; i < 5; i++ )
{
gets(str[i]);
for(int j = 0; j < strlen(str[i]); j++)
if(str[i][j] == ' ')
{
x=i;
y=j;
}
}
while(gets(Deal) != NULL)
{
if(ErrorFlag == 0)
{
for(int i = 0 ; i < strlen(Deal); i++)
{
if(Deal[i] == 'A')
{
if(x == 0)
{
ErrorFlag = 1;
break;
}
ch = str[x][y];
str[x][y] = str[x-1][y];
str[x-1][y] = ch;
x--;
}
if(Deal[i] == 'B')
{
if(x == 4)
{
ErrorFlag = 1;
break;
}
ch = str[x][y];
str[x][y] = str[x+1][y];
str[x+1][y] = ch;
x++;
}
if(Deal[i] == 'R')
{
if(y == 4)
{
ErrorFlag = 1;
break;
}
ch = str[x][y];
str[x][y] = str[x][y+1];
str[x][y+1] = ch;
y++;
}
if(Deal[i] == 'L')
{
if(y == 0)
{
ErrorFlag = 1;
break;
}
ch = str[x][y];
str[x][y] = str[x][y-1];
str[x][y-1] = ch;
y--;
}
}
}
if(Deal[strlen(Deal) - 1] == '0') break;
}
if(Flag)
printf("\n");
printf("Puzzle #%d:\n", ++Flag);
if(ErrorFlag)
{
printf("This puzzle has no final configuration.\n");
continue;
}
for(int i = 0; i < 5; i++)
{
for(int j=0; j < 5; j++)
{
if(j)
printf(" ");
printf("%c", str[i][j]);
}
printf("\n");
}
}
return 0;
}