有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别表示把空格上、下、左右的相邻字母移到空格种。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”。注意指令要以0结束输出,例如:AAALQRR0
#include<stdio.h>
int main()
{
char a[5][5], b[100]; int n, m;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
a[i][j] = getchar();//输入字母矩阵
}
for (int i = 0; i < 5; i++)//打印字母矩阵,顺手找空格位置(n,m)
{
for (int j = 0; j < 5; j++)
{
printf("%c ", a[i][j]); if (a[i][j] == ' ') { n = i; m = j; }
}printf("\n");
}
scanf("%[^0]", b);//输入除了0以外的指令,输入0结束输出。
for (int t = 0; t < strlen(b); t++)//读取指令,例如A就会让空格被赋值为即将被移动的位置的
{//字符,再将需移动到位置字符赋值为空格,即可实现换位。且字符(n,m)始终指向空格位置。
if (b[t] == 'A' && n != 0) { a[n][m] = a[n - 1][m]; a[--n][m] = ' '; }
else if (b[t] == 'B' && n != 4) { a[n][m] = a[n + 1][m]; a[++n][m] = ' '; }
else if (b[t] == 'L' && m != 0) { a[n][m] = a[n][m - 1]; a[n][--m] = ' '; }
else if (b[t] == 'R' && m != 4) { a[n][m] = a[n][m + 1]; a[n][++m] = ' '; }
else
printf("This puzzle no final configuration\n");
return 0;
}for (int i = 0; i < 5; i++)//打印换位的字母矩阵。
{
for (int j = 0; j < 5; j++)
printf("%c ", a[i][j]);
printf("\n");
}
return 0;
}