有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”
例如,图3-5中执行ARRBBL0后,效果如图所示。
#include<stdio.h>
int main()
{
char Q[5][6]= {"TRGSJ","XDOKI","M VLN","WPABE","UQHCF"};
char s[10];
int x=2,y=1; //空格的坐标
scanf("%s",s);
for(int i=0; s[i]!='0'&&s[i]!='\0'; i++)
{
switch(s[i])
{
case 'A':
{
if(x-1>=0)
{
Q[x][y]=Q[x-1][y];
Q[x-1][y]=' ';
--x;
}
else
{
printf("This puzzle has no final configuration.");
return 0;
}
};
break;
case 'B':
{
if(x+1<=4)
{
Q[x][y]=Q[x+1][y];
Q[x+1][y]=' ';
++x;
}
else
{
printf("This puzzle has no final configuration.");
return 0;
}
};
break;
case 'L':
{
if(y-1>=0)
{
Q[x][y]=Q[x][y-1];
Q[x][y-1]=' ';
--y;
}
else
{
printf("This puzzle has no final configuration.");
return 0;
}
};
break;
case 'R':
{
if(y+1<=4)
{
Q[x][y]=Q[x][y+1];
Q[x][y+1]=' ';
++y;
}
else
{
printf("This puzzle has no final configuration.");
return 0;
}
};
break;
}
}
for(int i=0; i<5; i++)
printf("%s\n",Q[i]);
return 0;
}