UVA-3.5-谜题-227
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int x,y;
int A (char map[10][10]);
int B (char map[10][10]);
int L (char map[10][10]);
int R (char map[10][10]);
char map[10][10];
int mark=0;
int main()
{
memset(map,0,sizeof(map));
int count=1;
while(1)
{ int k;
int i;
if(count!=1)
{
char b;
b=getchar();
}
gets(map[1]);
//printf("map[1]=%s***\n",map[1]);
k=strlen(map[1]);
if(k==1&&map[1][0]=='Z')
break;
for(i=0;i<k;i++)
{
if(map[1][i]==' '||map[1][i]=='0')
{
x=1;
y=i;
}
if(k==4)
{
x=1;
y=4;
map[x][y]=' ';
}
}
int j;
for(i=2;i<=5;i++)
{
gets(map[i]);
int k1=strlen(map[i]);
for(j=0;j<k1;j++)
{
if(map[i][j]==' ')
{
x=i;
y=j;
}
}
if(k1==4)
{
x=i;
y=4;
map[x][y]=' ';
}
}
char turn;
// printf("****x=%d,y=%d\n\n",x,y);
//puts(map[1]);
while(1)
{
scanf("%c",&turn);
if(turn=='0')
break;
else
{
if(turn=='A')
{
A(map);
if(mark)
break;
}
if(turn=='B')
{
B(map);
if(mark)
break;
}
if(turn=='L')
{
L(map);
if(mark)
break;
}
if(turn=='R')
{
R(map);
if(mark)
break;
}
}
}
char b;
//printf("\n");
if(count!=1)
printf("\n");
printf("Puzzle #%d:\n",count++);
if(mark)
{ while(1)
{
scanf("%c",&turn);
if(turn=='0')
break;
}
mark=0;
printf("This puzzle has no final configuration.\n");
continue;
}
for(i=1;i<=5;i++)
{
for(j=0;j<5;j++)
{
if(j==0)
printf("%c",map[i][j]);
else
printf(" %c",map[i][j]);
}
printf("\n");
}
}
return 0;
}
int A (char map[10][10])
{
char t;
if(x-1<=0)
{
mark=1;
return mark;
}
t=map[x-1][y];
map[x-1][y]=map[x][y];
map[x][y]=t;
x=x-1;
}
int B (char map[10][10])
{
char t;
if(x+1>5)
{
mark=1;
return mark;
}
t=map[x+1][y];
map[x+1][y]=map[x][y];
map[x][y]=t;
x=x+1;
}
int L (char map[10][10])
{
char t;
//printf("L1:%s*\n",map[x]);
if(y-1<0)
{
mark=1;
return mark;
}
t=map[x][y-1];
map[x][y-1]=map[x][y];
map[x][y]=t;
y=y-1;
//printf("L:%s\n",map[x]);
}
int R (char map[10][10])
{
char t;
if(y+1>4)
{
mark=1;
return mark;
}
t=map[x][y+1];
map[x][y+1]=map[x][y];
map[x][y]=t;
y=y+1;
}