數獨問題(DFS 回溯)

2021-10-24 19:46:25 字數 1517 閱讀 8390

數獨遊戲的規則是這樣的:在乙個9x9的方格中,你需要把數字1-9填寫到空格當中,並且使方格的每一行和每一列中都包含1-9這九個數字。同時還要保證,空格中用粗線劃分成9個3x3的方格也同時包含1-9這九個數字。比如有這樣乙個題,大家可以仔細觀察一下,在這裡面每行、每列,以及每個3x3的方格都包含1-9這九個數字。

樣例

sample input

7 1 2 ? 6 ? 3 5 8

? 6 5 2 ? 7 1 ? 4

? ? 8 5 1 3 6 7 2

9 2 4 ? 5 6 ? 3 7

5 ? 6 ? ? ? 2 4 1

1 ? 3 7 2 ? 9 ? 5

? ? 1 9 7 5 4 8 6

6 ? 7 8 3 ? 5 1 9

8 5 9 ? 4 ? ? 2 3

sample output

7 1 2 4 6 9 3 5 8

3 6 5 2 8 7 1 9 4

4 9 8 5 1 3 6 7 2

9 2 4 1 5 6 8 3 7

5 7 6 3 9 8 2 4 1

1 8 3 7 2 4 9 6 5

2 3 1 9 7 5 4 8 6

6 4 7 8 3 2 5 1 9

8 5 9 6 4 1 7 2 3

#include

#include

#include

using

namespace std;

struct node

;node arr[

105]

;char ch;

int map[10]

[10];

int n =0;

bool

judge

(int num,

int x,

int y)

x = x /3*

3;y = y /3*

3;for(

int i = x; i < x +3;

++i)

}return

true;}

void

dfs(

int dept)

cout << endl;

}return;}

for(

int i =

1; i <=9;

++i)}}

int line =0;

intmain()

else

map[0]

[0]= ch -

'0';

for(

int i =

0; i <9;

++i)

else

map[i]

[j]= ch -

'0';}}

if(line++

) cout << endl;

dfs(0)

;}return0;

}

C 解決數獨問題(回溯)

參考鏈結來自於 輸入乙個數獨作為9 9的陣列,例如輸入乙個測試資料map 9 9 為 0 9 0 0 0 0 0 6 0 8 0 1 0 0 0 5 0 9 0 5 0 3 0 4 0 7 0 0 0 8 0 7 0 9 0 0 0 0 0 9 0 8 0 0 0 0 0 6 0 2 0 7 0 0...

數獨 dfs 剪枝

參考 yxc 題意 就是給你乙個九宮格,讓你填數,使橫行包含1 9,縱行包含1 9,每一塊包含1 9 思路 本題採用深搜,然後通過用col和row分別記錄橫行和縱行沒有被用過的數,cell來標記沒有被用過的數,通過0代表這個數已經被用過了,1代表這個數沒有被用過,然後通過剪枝找到某個數可以填數的最小...

poj 2676 數獨問題 dfs

題意 完成數獨程式,數獨要求每行每列且每個3 3矩陣都必須是1 9的數字組成。思路 dfs 用row i n 記錄第i行n存在 用col j n 記錄第j列n存在 grid k n 記錄第k個3 3中的n存在 遍歷的時候,先把列遍歷完然後在遍歷行 if map r c 現在推第乙個矩陣為 0,0 0...