有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指

令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指
令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This
puzzle has no final configuration.”,例如,图3-5中执行ARRBBL0后,效果如图3-6所示。

写的比较简陋,先写了容器,然后填充,写移动条件。

以下是用C写的源码:

#include
#include
int main(){char net[7][7],c=65,ch;int i,j;memset(net,32,sizeof net);for(i=1;i<6;i++)for(j=1;j<6;j++)net[i][j]=(c++);net[5][5]=42;int x=5,y=5,temp;do{while((c=getchar())!=EOF&&(c==65||c==66||c==76||c==82)){if(x>0&&x<7&&y<7&&y-1>0&&c==65){temp=net[y][x];net[y][x]=net[y-1][x];net[y-1][x]=temp;y--;}if(x>0&&x<7&&y>0&&y+1<7&&c==66){temp=net[y][x];net[y][x]=net[y+1][x];net[y+1][x]=temp;y++;}if(x-1>0&&x<7&&y>0&&y<7&&c==76){temp=net[y][x];net[y][x]=net[y][x-1];net[y][x-1]=temp;x--;}if(x>0&&x+1<7&&y>0&&y<7&&c==82){temp=net[y][x];net[y][x]=net[y][x+1];net[y][x+1]=temp;x++;}}if(c!=65&&c!=66&&c!=76&&c!=82)printf("The puzzle has no final configuration.\n");for(i=0;i<7;i++) {for(j=0;j<7;j++) printf("%c",net[i][j]);printf("\n");}}while(c!='q');return 0;}~                                                                                  ~                                                                                  ~