UVA227 谜题

有一个55的网格,其中恰好有一个格子是空的,其他格子各有一个字母,一共有四种指令:A,B,L,R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(分别以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出”This puzzle has no final configuration.

没什么好说的题目不难但是注意输出格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include
#include
#define maxn 20
#define command 10001
#define tex
char a[maxn][maxn];
char s[maxn][command];
int main()
{
#ifdef text
freopen("data.in","r",stdin);
freopen("datas.out","w",stdout);
#endif
int blank_x,blank_y;
int flag ,puzzle=1;
int i,j,len2;

while(1)
{
blank_x=0,blank_y=0;
flag=1;
fgets(a[0],7,stdin);
if(strlen(a[0])<3&&a[0][0]=='Z') break;
fgets(a[1],7,stdin);
fgets(a[2],7,stdin);
fgets(a[3],7,stdin);
fgets(a[4],7,stdin);

for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(a[i][j]==' '){
blank_x=j;
blank_y=i;
/*printf("%d %d",i,j);*/
}
}
}
int q=0;
for(;;){
fgets(s[q],command,stdin);
int len = strlen(s[q]);
if(s[q][len-2]-'0'!=0)
{
q++;
}else{
break;
}
}

for(i=0;i<=q;i++)
{
len2=strlen(s[i]);
for(j=0;j<len2;j++) { if(s[i][j]=='0'|| s[i][j]=='A' || s[i][j]=='B' || s[i][j]=='L' || s[i][j]=='R') { if(s[i][j]== 'A' && blank_y!=0) { a[blank_y][blank_x]=a[blank_y-1][blank_x]; a[--blank_y][blank_x]=' '; } else if(s[i][j]=='B'&& blank_y!=4) { a[blank_y][blank_x]=a[blank_y+1][blank_x]; a[++blank_y][blank_x]=' '; } else if(s[i][j]=='L'&&blank_x!=0) { a[blank_y][blank_x]=a[blank_y][blank_x-1]; a[blank_y][--blank_x]=' '; } else if(s[i][j]=='R'&&blank_x!=4) { a[blank_y][blank_x]=a[blank_y][blank_x+1]; a[blank_y][++blank_x]=' '; } else if(s[i][j]=='0') { break; } else{ flag = 0; } } } } if(puzzle>1)
{
printf("\n");
}
if(flag)
{
printf("Puzzle #%d:\n",puzzle++);
for(i=0;i<5;i++)
{
printf("%c %c %c %c %c\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]);
}
}
else{
printf("Puzzle #%d:\n",puzzle++);
printf("This puzzle has no final configuration.\n");
}
}
return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注