AcWing 1613 數獨簡單版(DFS)

2021-10-18 17:20:23 字數 1783 閱讀 4379

題目鏈結

數獨是一種傳統益智遊戲,你需要把乙個 9×9 的數獨補充完整,使得圖中每行、每列、每個 3×3 的九宮格內數字 1∼9 均恰好出現一次。

請編寫乙個程式填寫數獨。

輸入格式

輸入共 9 行,每行包含乙個長度為 9 的字串,用來表示數獨矩陣。

其中的每個字元都是 1∼9 或 .(表示尚未填充)。

輸出格式

輸出補全後的數獨矩陣。

資料保證有唯一解。

輸入樣例:

.2738..1

..1..

.6735..

....

.293.5692.8.

....

....

..6.1745

.364...

....

9518...7

..8..6534

.

輸出樣例:

527389416

819426735

436751829

375692184

194538267

268174593

643217958

951843672

782965341

答案:

#include

#include

#define ll long long

#define ull unsigned long long

#define inf 0x3f3f3f3f3f3f3f3f

#define rep(i,a,b) for(auto i=a;i<=b;++i)

#define bep(i,a,b) for(auto i=a;i>=b;--i)

#define lowbit(x) x&(-x)

#define pii pair

#define pll pair

#define pi acos(-1)

#define pb push_back

#define eps 1e-6

const

int mod =

1e9+7;

const

int n =

1e5+10;

const

int m =11;

using

namespace std;

char s[m]

[m];

int n=10;

bool

dfs(

int x,

int y)

}rep

(i,0

,n-2)}

int dx=x/3*

3;/// 找到當前九宮格的左上角位置

int dy=y/3*

3;rep(i,dx,dx+2)

}}rep(i,

1,n-1)

} s[x]

[y]=

'.';

/// 如果搜完了所有可填數字,或沒有可填數字,那麼將該格改為未填狀態

return0;

/// 並返回 false

}void

solve()

dfs(0,

0);rep

(i,0

,n-2

) cout

acwing 1613 數獨簡單版 DFS爆搜

題目連線 數獨問題,需要在橫 縱 每9個方格之中填1到9數字。我們可以構建一棵dfs樹,對於每乙個節點要求滿足以上三總條件才可以更新這乙個點,如果這個點可以走下去那麼就深度搜尋下去,並且更新當點的狀態以此復原現場。y總 include using namespace std const int n ...

數獨簡單版

題目鏈結 數獨是一種傳統益智遊戲,你需要把乙個 9 9 的數獨補充完整,使得圖中每行 每列 每個 3 3 的九宮格內數字 1 9 均恰好出現一次。請編寫乙個程式填寫數獨。輸入共 9 行,每行包含乙個長度為 9 的字串,用來表示數獨矩陣 其中的每個字元都是 1 9 或 表示尚未填充 輸出補全後的數獨矩...

數獨簡單版(搜尋 剪枝)

數獨是一種傳統益智遊戲,你需要把乙個 9 9 9 9 的數獨補充完整,使得圖中每行 每列 每個 3 3 3 3 的九宮格內數字 1 9 1 9 均恰好出現一次。請編寫乙個程式填寫數獨。輸入格式 輸入共 9 9 行,每行包含乙個長度為 9 9 的字串,用來表示數獨矩陣。其中的每個字元都是 1 9 1 ...