一个作业(网格),刚开始学,不知道错哪儿 请各位帮忙看看
有一个5*5的网格,其中恰有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别表示空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出"This puzzle has no final configeration.",例如,以下网格执行ARRBBL0后,效果如下:T R G S J 执行后 T R G S J
X D O K I X O K L I
M V L N M D V B N
W P A B E W P A E
U Q H C F U Q H C F
各位随意批评指正,真的刚开始学好多地方不知道。。
也可以直接给个答案我自己看。。
#include<stdio.h>
#include<string.h>
void main(){
char a[4][4];
char b[50];
int x=0;
int y=0;
int i=0;
int n=0;
char t;
char ch;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
void left(){
t=a[x][y];
if(y-1<-1) printf("This puzzle has no final configeration.");
a[x][y]=a[x][y-1];
a[x][y-1]=t;
}
void up(){
t=a[x][y];
if(x-1<-1) printf("This puzzle has no final configeration.");
a[x][y]=a[x-1][y];
a[x-1][y]=t;
}
void right(){
t=a[x][y];
if(y+1>5) printf("This puzzle has no final configeration.");
a[x][y]=a[x][y+1];
a[x][y+1]=t;
}
void down(){
t=a[x][y];
if(x+1>5) printf("This puzzle has no final configeration.");
a[x][y]=a[x+1][y];
a[x+1][y]=t;
}
void print(){
for(x=0;x<5;x++)
{for(y=0;y<5;y++)
printf("%c ",a[x][y]);
printf("\n");}
}
for(x=0;x<5;x++){
for(y=0;y<5;y++)
scanf("%c",&a[x][y]);}
for(x=0;x<5;x++)
{for(y=0;y<5;y++)
printf("%c ",a[x][y]);
printf("\n");}
scanf("%s",&b);
while((ch=getchar())!='0'){
b[i++]=ch;
}
n=i;
for(i=0;i<=n;i++){
if(b[i]=='A') up();
if(b[i]=='B') down();
if(b[i]=='L') left();
if(b[i]=='R') right();
}
print();
}