#include<stdio.h>
#include <string.h>
const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};//作为一个指令,移动空格
char s[10][10];
int map[26];
char cnn;
int flag;
void read_sq()
{
s[0][0]=cnn;//将第一个字符存为数组的第一位
int i,j;
for(i=1;i<5;i++)
scanf("%c",&s[0][i]);//读取第一行字符
getchar();
for(i=1;i<5;i++)
{
for(j=0;j<5;j++)
scanf("%c",&s[i][j]);
getchar();
}
}
void read_query()
{
int x,y,nx,ny,i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(s[i][j]==' ')
{
x=i;y=j;
break;
}
char cn;
while(scanf("%c",&cn)!=EOF)//读取指令
{
if(cn=='0')break;
if(!flag||!(cn=='L'||cn=='R'||cn=='A'||cn=='B'))continue;
int num=map[cn-'A'];
nx=x+dx[num];
ny=y+dy[num];
if(nx>=0&&nx<5&&ny>=0&&ny<5)
{
char t;
t=s[x][y];s[x][y]=s[nx][ny];s[nx][ny]=t;
x=nx;y=ny;
}
else flag=0;
}
}
void init()//作为dx、dy的下标;
{
map['L'-'A']=0;
map['R'-'A']=1;
map['A'-'A']=2;
map['B'-'A']=3;
}
int main()
{
init();
int k=1,i,j;
while(scanf("%c",&cnn)!=EOF)//读取所有字符
{
if(cnn=='Z')break;
read_sq();//读取网格
flag=1;
read_query();//读取指令
if(k!=1)printf("\n");
printf("Puzzle #%d:\n",k++);
if(flag==0)
printf("This puzzle has no final configuration.\n");
else
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c%c",s[i][j],j==4?'\n':' ');
}
getchar();
}
return 0;
}
Puzzle uva227
猜你喜欢
转载自blog.csdn.net/wwwwcw/article/details/81160449
今日推荐
周排行