一. 题目链接:

Puzzle UVA-227

二.题目大意:

有一个 5 × 5 的字母矩阵,其中有一个是空格。

共有 4 中指令,分别为 A, B, L, R.

A:将空格上的相邻字母移到空格中.

B:将空格下的相邻字母移到空格中.

L:将空格左的相邻字母移到空格中.

R:将空格右的相邻字母移到空格中.

输入指令后 若有非法指令输出“This puzzle has no final configuration.”  否则输出执行指令后的网格.

三.分析:

水题!

难就难在 输入 和 输出格式上.

还是太菜了.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <ctime>
#include <stack>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
#define eps 0.000001
#define PI acos(-1.0)
#define ll long long int
using namespace std;

int main()
{
    char ch;
    int i, j;
    int tot = 0;
    string mp[10];
    while(getline(cin, mp[0]) && mp[0][0] != 'Z')
    {
        bool flag = 1;
        int x = -1;
        int y = -1;
        for(i = 1; i < 5; ++i)
            getline(cin, mp[i]);
        for(i = 0; i < 5; ++i)
        {
            for(j = 0; j < 5; ++j)
            {
///这里注意,如果空格在最后,好像没有输入,所以说用 '\0' 来记录行末的空格.
                if(mp[i][j] == ' ' || mp[i][j] == '\0')
                {
                    x = j;
                    y = i;
                }
            }
        }
        while((ch = getchar()) != '0')
        {
            if(flag)
            {
                if(ch == 'A')
                {
                    if(y == 0)
                        flag = 0;
                    else
                    {
                        swap(mp[y - 1][x], mp[y][x]);
                        y--;
                    }
                }
                else if(ch == 'B')
                {
                    if(y == 4)
                        flag = 0;
                    else
                    {
                        swap(mp[y + 1][x], mp[y][x]);
                        y++;
                    }
                }
                else if(ch == 'L')
                {
                    if(x == 0)
                        flag = 0;
                    else
                    {
                        swap(mp[y][x - 1], mp[y][x]);
                        x--;
                    }
                }
                else if(ch == 'R')
                {
                    if(x == 4)
                        flag = 0;
                    else
                    {
                        swap(mp[y][x + 1], mp[y][x]);
                        x++;
                    }
                }
            }
        }
        if(tot)
            printf("\n");///这里的格式。。。没仔细读题
        printf("Puzzle #%d:\n", ++tot);
        if(flag)
        {
            for(i = 0; i < 5; ++i)
            {
                for(j = 0; j < 5; ++j)
                {
                    if(j)
                        printf(" ");
                    cout << mp[i][j];
                }
                printf("\n");
            }
        }
        else
            printf("This puzzle has no final configuration.\n");
        getchar();///这里注意下
    }
    return 0;
}

这个题难就难在输入上,还有一些小细节要注意!