大佬帮看下555
/*
* UVa 227 - Puzzle
pretty nasty, i o shit
use 'fisrt' boolean variable to fit the format
*/
#include <stdio.h>
#include <string.h>
#define SWAP(a, b) ((a) ^= (b) ^= (a) ^= (b))
#define error "This puzzle has no final configuration."
int main() {
#ifdef DEBUG
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int k = 1;
int first = 1;
/**
* @brief
* handle input
*/
while (1) {
int x = 0;
int y = 0;
char arr[6][6] = {0};
char mvs[50] = {0};
char ch = getchar();
if (ch == '\n') ch = getchar();
if (ch == 'Z')
return 0; // if it's 'Z', quit
else
ungetc(ch, stdin);
for (int i = 0; i < 5; i++) {
scanf("%c%c%c%c%c\n", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3],
&arr[i][4]);
}
// replace \n with ' '
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (arr[i][j] == '\n') arr[i][j] = ' ';
}
}
// sequence of moves
/**
* This sequence of moves may be spread
* over several lines, but it always ends in the digit 0
*
* getline is way more easier
* // getline(cin, mvs, '0');
*/
char cmd;
int ck = 0; // cmd counts
while ((cmd = getchar()) != EOF) {
if (cmd == '\n') {
cmd = getchar();
}
if (cmd == '0') {
mvs[ck + 1] = '\0';
break;
}
mvs[ck] = cmd;
ck++;
}
/**
* @brief
* end of input
*/
// buscarla
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (arr[i][j] == ' ') {
x = i;
y = j;
}
// handle commands
int flag = 0; // is_end
for (int i = 0; i < ck; i++) {
switch (mvs[i]) {
case 'A':
if (x <= 0) {
flag = 1;
break;
}
SWAP(arr[x][y], arr[x - 1][y]);
x--;
break;
case 'B':
if (x >= 4) {
flag = 1;
break;
}
SWAP(arr[x][y], arr[x + 1][y]);
x++;
break;
case 'R':
if (y >= 4) {
flag = 1;
break;
}
SWAP(arr[x][y], arr[x][y + 1]);
y++;
break;
case 'L':
if (y <= 0) {
flag = 1;
break;
}
SWAP(arr[x][y], arr[x][y - 1]);
y--;
break;
// unknown command
default:
flag = 1;
break;
}
}
if (!first) putchar('\n');
if (first) first = 0;
printf("Puzzle #%d:\n", k++);
#ifdef DEBUG
// printf("cmds: %s\n", mvs);
#endif
if (flag) {
puts(error);
} else {
for (int i = 0; i < 5; i++) {
printf("%c %c %c %c %c\n", arr[i][0], arr[i][1], arr[i][2], arr[i][3],
arr[i][4]);
}
}
}
return 0;
}