【习题 3-5 UVA-227】Puzzle

【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

模拟题。。 输入稍微恶心了点。 getchar()一个一个搞就好。

【代码】

#include <bits/stdc++.h>
using namespace std;

const int N = 5;

string s[N + 5],s2;
char S[N + 5][N + 5];
int x, y;

bool ok()
{
	bool ok = true;
	for (char key = getchar();key !='0';key = getchar())
	{
		if (!ok) continue;
		int x2 = x, y2 = y;
		switch (key)
		{
			case 'A':
			{
				x2--;
				break;
			}
			case 'B':
			{
				x2++;
				break;
			}
			case 'L':
			{
				y2--;
				break;
			}
			case 'R':
			{
				y2++;
				break;
			}
		default:
			break;
		}
		if (x2 <= 0 || x2 >= 6 || y2 <= 0 || y2 >= 6) {
			ok = false; continue;
		}
		swap(S[x][y], S[x2][y2]);
		x = x2, y = y2;
	}
	getchar();
	return ok;
}

int main()
{
	/*freopen("F:\rush.txt", "r", stdin);*/
	int kase = 0;
	while (getline(cin,s[1]) && s[1][0]!='Z')
	{
		if (kase > 0) puts("");
		kase++;
		printf("Puzzle #%d:
",kase);
		for (int i = 2; i <= 5; i++) getline(cin, s[i]);
		for (int i = 1; i <= 5; i++)
			for (int j = 1; j <= 5; j++)
			{
				S[i][j] = s[i][j - 1];
				if (S[i][j] == ' ')
				{
					x = i, y = j;
				}
			}

		if (ok())
		{
			for (int i = 1; i <= 5; i++)
				for (int j = 1; j <= 5; j++)
				{
					cout << S[i][j];
					if (j == 5) cout << endl;
					else cout << ' ';
				}
		}
		else 
			cout << "This puzzle has no final configuration." << endl;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/AWCXV/p/7688350.html