Puzzle uva227

#include<stdio.h>
#include <string.h>
const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};//作为一个指令,移动空格
char s[10][10];
int map[26];
char cnn;
int flag;
void read_sq()
{
    s[0][0]=cnn;//将第一个字符存为数组的第一位
    int i,j;
    for(i=1;i<5;i++)
        scanf("%c",&s[0][i]);//读取第一行字符
    getchar();
    for(i=1;i<5;i++)
    {
        for(j=0;j<5;j++)
            scanf("%c",&s[i][j]);
        getchar();
    }
}
void read_query()
{
    int x,y,nx,ny,i,j;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            if(s[i][j]==' ')
            {
                x=i;y=j;
                break;
            }
        char cn;
        while(scanf("%c",&cn)!=EOF)//读取指令
        {
            if(cn=='0')break;
            if(!flag||!(cn=='L'||cn=='R'||cn=='A'||cn=='B'))continue;
            int num=map[cn-'A'];
            nx=x+dx[num];
            ny=y+dy[num];
            if(nx>=0&&nx<5&&ny>=0&&ny<5)
            {
                char t;
                t=s[x][y];s[x][y]=s[nx][ny];s[nx][ny]=t;
                x=nx;y=ny;
            }
        else flag=0;
        }
}
void init()//作为dx、dy的下标;
{
    map['L'-'A']=0;
    map['R'-'A']=1;
    map['A'-'A']=2;
    map['B'-'A']=3;
}
int main()
{
    init();
    int k=1,i,j;
    while(scanf("%c",&cnn)!=EOF)//读取所有字符
    {
        if(cnn=='Z')break;
        read_sq();//读取网格
        flag=1;
        read_query();//读取指令
        if(k!=1)printf("\n");
        printf("Puzzle #%d:\n",k++);
        if(flag==0)
            printf("This puzzle has no final configuration.\n");
        else
            for(i=0;i<5;i++)
            {
                for(j=0;j<5;j++)
                    printf("%c%c",s[i][j],j==4?'\n':' ');
            }
        getchar();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wwwwcw/article/details/81160449