poj 2676 數獨問題 dfs

2022-09-08 18:27:14 字數 1053 閱讀 9301

題意:完成數獨程式,數獨要求每行每列且每個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,1 0,2              第二個矩陣為   0,3 0,4 0,5

1,0 1,1 1,2                                       1,3  1,4 1,5

2,0 2,1 2,2                                       2,3 2,4 2,5

如果直接 (r+c)/3有些不符合,說明應該把 r c拆開來看 所以推出 r/3*3+c/3

解決問題的**:

#include#include

using

namespace

std;

const

int maxn = 10

;int

map[maxn][maxn];

bool

row[maxn][maxn];

bool

col[maxn][maxn];

bool

grid[maxn][maxn];

bool dfs(int r, int

c)

int k = (r / 3) * 3 + c / 3

;

for (int i = 1; i <= 9; i++)if (!row[r][i] && !col[c][i] && !grid[k][i])

return

false;}

intmain()

}dfs(

0, 0

);

for (int i = 0; i<9; i++)

}return0;

}

POJ 2676(數獨求解器 搜尋)

題目鏈結poj2676 給你乙個9 9的數獨讓你找出一種可行解 題目不難,有點類似於八皇后的做法,放上乙個數後,用x y z陣列標記上 之前一直習慣下標從1開始好理解,但做了這道題之後發現從0開始也是有好處的,從一行的最後乙個格仔跳到下一行的第乙個格仔時用取模來做很方便。總的來說這題的 寫得還算滿意...

POJ 2676 數獨 程式設計之美1 15

演算法講解 low逼演算法dfs,這裡如果不用空間換時間會tle 所以說我們加入三個判斷矩陣 hang x i 第x行有沒有出現i lie x i 第i列有沒有出現i sq x y i 以x,y為首標號的子矩陣有沒有i 然後總結一些常見錯誤 1.每次試探成功,hang,lie,sq都要更新 2.我們...

poj2676 Sudoku 數獨,dfs 剪枝)

給定乙個不完整9 9數獨,未填部分用0表示,恢復數獨,並列印 在讀入的時候,我們開幾個陣列,sudoku 9 9 相當於這張數獨地圖,上面記錄值 checkrow 9 10 第i行,是否出現過數v,1 v 9 checkcol 9 10 第j列,是否出現過數v,1 v 9 square 9 10 第...