//
这个题也是个模拟了, 当时因为最后的空行一个星期没提交对。当时觉得自己的代码很好了, 现在看也是幼稚的很。不过当时做得很认真。代码还是比较清晰的。附原来的blog上的代码!加油!
//
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int row,line;
int i,j;
int num=1,len;
char temp;
int count;
while(1)
{
char str[5][5];
gets(str[0]);
if(str[0][0]=='Z')
{
break;
}
gets(str[1]);
gets(str[2]);
gets(str[3]);
gets(str[4]);
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(str[i][j]==' ')
{
row=i;
line=j;
}
}
}
char arr[1000];
i=0;
while(scanf("%c",&arr[i])!=EOF&&arr[i]!='0')
{
i++;
}
len=i;
if(num>1)
{
printf("\n");
}
for(i=0;i<len;i++)
{
if(row==0&&arr[i]=='A'||row==4&&arr[i]=='B'||line==0&&arr[i]=='L'||line==4&&arr[i]=='R')
{
printf("Puzzle #%d:\n",num);
printf("This puzzle has no final configuration.\n");
num++;
memset(str,0,sizeof(str));
memset(arr,0,sizeof(arr));
getchar();
break;
}
else
{
if(arr[i]=='A')
{
temp=str[row-1][line];
str[row-1][line]=' ';
str[row][line]=temp;
row=row-1;
line=line;
}
if(arr[i]=='B')
{
temp=str[row+1][line];
str[row+1][line]=' ';
str[row][line]=temp;
row=row+1;
line=line;
}
if(arr[i]=='L')
{
temp=str[row][line-1];
str[row][line-1]=' ';
str[row][line]=temp;
row=row;
line=line-1;
}
if(arr[i]=='R')
{
temp=str[row][line+1];
str[row][line+1]=' ';
str[row][line]=temp;
row=row;
line=line+1;
}
}
}
if(len==i)
{
printf("Puzzle #%d:\n",num);
for(i=0;i<5;i++)
{
count=0;
for(j=0;j<5;j++)
{
if(count==0)
{
printf("%c",str[i][j]);
count=1;
}
else
{
printf(" %c",str[i][j]);
}
}
printf("\n");
}
num++;
memset(str,0,sizeof(str));
memset(arr,0,sizeof(arr));
getchar();
continue;
}
}
return 0;
}