UVA 227

 直接做的,没想到什么好技巧,做的比较啰嗦。。。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    char square[5][5];
    char s[100];
    char a;//临时的字符
    int num;//计数
    int n=1;//经过了几次
    while(1) //一开始的东西
    {
        int blank_i;
        int blank_j;
        for (int i = 0; i < 5; ++i)
        {
            memset(square[i],0,sizeof(square[i]));
            num=0;
            while((a=getchar())!='\n')
            {
                if(a=='Z')
                    return 0;
                else if(a==' ')
                {
                    blank_i=i;
                    blank_j=num;
                }
                square[i][num++]=a;
            }
        }
        memset(s,0,sizeof(s));//输入命令
        num=0;
        while(cin>>a && a!='0')
            s[num++]=a;

        bool flag=true;
        for (int i = 0; i < (int)strlen(s); ++i)
        {
            if(s[i]=='A')//与上面的进行交换
            {
                if(blank_i==0)
                {
                    flag=false;
                    break;
                }
                square[blank_i][blank_j]=square[blank_i-1][blank_j];
                blank_i=blank_i - 1;
                square[blank_i][blank_j]=' ';
            }
            else if(s[i]=='B')//与下面的进行交换
            {
                if(blank_i==4)
                {
                    flag=false;
                    break;
                }
                square[blank_i][blank_j]=square[blank_i+1][blank_j];
                blank_i=blank_i + 1;
                square[blank_i][blank_j]=' ';
            }
            else if(s[i]=='L')//与左面的进行交换
            {
                if(blank_j==0)
                {
                    flag=false;
                    break;
                }
                square[blank_i][blank_j]=square[blank_i][blank_j-1];
                blank_j=blank_j - 1;
                square[blank_i][blank_j]=' ';
            }
            else if(s[i]=='R')//与右面的进行交换
            {
                if(blank_j==4)
                {
                    flag=false;
                    break;
                }
                square[blank_i][blank_j]=square[blank_i][blank_j+1];
                blank_j=blank_j + 1;
                square[blank_i][blank_j]=' ';
            }
        }

        if(n>1)
            cout<<endl;
        printf("Puzzle #%d:\n",n++);
        if(flag==false)
            printf("This puzzle has no final configuration.\n");
        else
        {
            for (int i = 0; i < 5; ++i)
                for (int j = 0; j < 5; ++j)
                {
                    cout<<square[i][j];
                    if(j<=3)
                        cout<<" ";
                    if(j==4)
                        cout<<"\n";
                }
        }
        getchar();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38825091/article/details/82827559