#include <iostream>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
const int maxn = 16, maxm = 16;
char matrix[maxn][maxm], result[maxn][maxm], vis[maxm];
char ok;
bool IsEqual()
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 9; j++) {
if (matrix[i][j] != result[i][j]) return false;
}
}
return true;
}
bool dfs(int step) {
if (IsEqual()) return true;
if (step > 6) return false;
char back[maxn][maxm];
memmove(back, matrix, sizeof(back));
for (int i = 0; i < 9; i++) {
if (vis[i]) continue;
vis[i] = 1;
int row = i / 3, col = (i % 3) * 2;
matrix[row][col + 1] = matrix[row][col + 3] = matrix[row + 2][col + 1] = matrix[row + 2][col + 3] = '_';
matrix[row + 1][col] = matrix[row + 2][col] = matrix[row + 1][col + 4] = matrix[row + 2][col + 4] = '|';
matrix[row + 1][col + 1] = matrix[row + 2][col + 2] = matrix[row + 1][col + 2] = matrix[row + 1][col + 3] = ' ';
if (dfs(step + 1)) return true;
vis[i] = 0;
memmove(matrix, back, sizeof(matrix));
}
return false;
}
int main()
{
int index = 0;
while (gets(result[0]) && result[0][0] != '0') {
memset(matrix, ' ', sizeof(matrix));
memset(vis, 0, sizeof(vis));
for (int i = 1; i < 5; i++) {
gets(result[i]);
}
cout << "Case " << ++index << ": " << (dfs(1) ? "Yes" : "No") << endl;
}
return 0;
}
习题7-6(uva-12113)
最新推荐文章于 2023-11-11 17:29:39 发布