【dfs】数独游戏(ybtoj dfs-1-2)
生活随笔
收集整理的這篇文章主要介紹了
【dfs】数独游戏(ybtoj dfs-1-2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數獨游戲
ybtoj dfs-1-3
題目大意
給出一個未完成的數獨,讓你完成它
輸入樣例
4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4...... ......52..8.4......3...9...5.1...6..2..7........3.....6...1..........7.4.......3. end輸出樣例
417369825632158947958724316825437169791586432346912758289643571573291684164875293 416837529982465371735129468571298643293746185864351297647913852359682714128574936解題思路
直接暴力枚舉每一個位置寫什么數字即可
代碼
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; int g, ans, a[15][15], p1[15][15], p2[15][15], p[15][15][15]; string str; void add(int x, int y, int z) {p[x / 3][y / 3][z] ^= 1;p1[x][z] ^= 1;p2[y][z] ^= 1; } bool pp(int x, int y, int z) {return !(p[x / 3][y / 3][z] || p1[x][z] || p2[y][z]); } void dfs(int x, int y) {if (x == 9){for (int i = 0; i < 9; ++i)for (int j = 0; j < 9; ++j)putchar(a[i][j] + 48);putchar(10);g = 1;return;}if (a[x][y]){dfs(x + (y + 1) / 9, (y + 1) % 9);return;}for (int i = 1; i <= 9; ++i)if (pp(x, y, i))//判斷能不能寫這個數字{a[x][y] = i;add(x, y, i);//對于同一個行,列或方格中的數字的約束dfs(x + (y + 1) / 9, (y + 1) % 9);if (g) return;add(x, y, i);a[x][y] = 0;} } int main() {while(cin>>str){if (str[0] == 'e') break;memset(a, 0, sizeof(a));memset(p, 0, sizeof(p));memset(p1, 0, sizeof(p1));memset(p2, 0, sizeof(p2));g = 0;for (int i = 0; i < 9; ++i)for (int j = 0; j < 9; ++j){if (str[g] != '.') a[i][j] = str[g] - 48, add(i, j, a[i][j]);g++;}g = 0;dfs(0, 0);}return 0; }總結
以上是生活随笔為你收集整理的【dfs】数独游戏(ybtoj dfs-1-2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 琼瑶小说婉君结局 是怎么样的
- 下一篇: 【dfs】虫食算(ybtoj dfs-1