点击打开链接
题目:给你一个字母组成的矩阵,其中有一个空位,给你移动的规则(类似平面的一种拼图游戏);
问是否操作合法,合法时输出移动后的结果。
说明:模拟。直接利用二位数组模拟即可。
#include<stdio.h>
#include<string.h>
int main()
{
char s[10][10],c,x;
int case1=0;
while(1)
{
int m,n,flag=0,zz=0;
for(int i=1; i<=5; i++)
{
for(int j=1; j<=5; j++)
{
c=getchar();
if(i==1&&j==1&&c=='Z')
{
return 0;
}
s[i][j]=c;
if(j==5&&c=='\n')
{
s[i][j]=' ';zz=1;
m=i;n=j;break;
}
if(c==' ')
{
m=i;
n=j;
}
}
if(!zz)
getchar();
}
while(1)
{
x=getchar();
if(x=='0')
break;
if(flag==0)
{
if(x=='A')
{
if(m==1)
flag=1;
else
{
char w=s[m][n];
s[m][n]=s[m-1][n];
s[m-1][n]=w;
m--;
}
}
else if(x=='B')
{
if(m==5)
flag=1;
else
{
char w=s[m][n];
s[m][n]=s[m+1][n];
s[m+1][n]=w;
m++;
}
}
else if(x=='L')
{
if(n==1)
flag=1;
else
{
char w=s[m][n];
s[m][n]=s[m][n-1];
s[m][n-1]=w;
n--;
}
}
else if(x=='R')
{
if(n==5)
flag=1;
else
{
char w=s[m][n];
s[m][n]=s[m][n+1];
s[m][n+1]=w;
n++;
}
}
}
}
if(case1+1!=1)
printf("\n");
printf("Puzzle #%d:\n",++case1);
if(flag)
printf("This puzzle has no final configuration.\n");
else
{
for(int i=1; i<=5; i++)
{
for(int j=1; j<=5; j++)
{
if(j==5)
printf("%c",s[i][j]);
else
printf("%c ",s[i][j]);
}
printf("\n");
}
}
getchar();
}
return 0;
}