算法竞赛入门经典第三章3-5 Puzzle UVA - 227

3-5习题
https://vjudge.net/problem/UVA-227

#include
#include
using namespace std;
int main() {
    string s[5],str,sss;
    int x, y,tt;
    int flag ;
    int cnt = 0;
    while (getline(cin, s[0]) && s[0] != "Z") {
        ++cnt;
        if (s[0].size() == 4) s[0]+= " ";
        if ((tt = s[0].find(' ')) != string::npos) { x = 0; y = tt; }
        for (int i = 1; i < 5; ++i) {
            getline(cin, s[i]);
            if (s[i].size() == 4) s[i] += " ";
            if ((tt = s[i].find(' ')) != string::npos) { x = i; y = tt; }
        }
        str = "";
        do {
            getline(cin, sss);
            str += sss;
        } while (str.back() != '0');
        flag = 0;
        for (int i = 0; i < str.size() - 1; ++i) {
            switch (str[i])
            {
            case 'A':
                if (!x) { flag = 1; break; }
                swap(s[x][y], s[x - 1][y]);
                x -= 1;
                break;
            case 'B':
                if(x==4) { flag = 1; break; }
                swap(s[x][y], s[x + 1][y]);
                x += 1;
                break;
            case 'L':
                if(!y) { flag = 1; break; }
                swap(s[x][y], s[x][y - 1]);
                y -= 1;
                break;
            case 'R':
                if(y==4) { flag = 1; break; }
                swap(s[x][y], s[x][y + 1]);
                y += 1;
                break;
            default:
                break;
            }
            if (flag) break;
        }
        if (cnt > 1) printf("\n");
        printf("Puzzle #%d:\n", cnt);
        if (flag) printf("This puzzle has no final configuration.\n");
        else {
            for (int i = 0; i < 5; ++i) {
                printf("%c", s[i][0]);
                for (int j = 1; j < 5; ++j)
                    printf(" %c", s[i][j]);
                printf("\n");
            }
        }   
    }
}

你可能感兴趣的:(算法竞赛入门经典第三章3-5 Puzzle UVA - 227)