日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【dfs】数独游戏(ybtoj dfs-1-2)

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。