POJ 2676 鍛鍊碼力 數獨,精確覆蓋的DLX

2021-07-06 05:00:04 字數 1318 閱讀 7332

題意:先給定資料組數t,每組資料都是乙個數獨遊戲,輸出它任意乙個解。

自從學了dlx之後,還沒寫過精確覆蓋,只用自己yy**寫過一次可重複覆蓋。這次寫乙個精確覆蓋。數獨麻煩的就是構建m矩陣,想了有一段時間。

對於構建數獨的m矩陣,大都是這樣的套路:

行表示的是在某個位置填某個數。

列表示的是:某個位置是否有數,某一行是否有某個數,某一列是否有某個數,某乙個塊是否有某個數。

只要記錄清楚行、列對應的是那些資訊就好了。

#include 

#include

#include

using

namespace

std;

int time, zero, sdk[15][15], need0[15][15], needr[15][15], needc[15][15], needb[15][15];

struct choice t[735];

struct dlx

l[0] = sz, r[sz] = 0;

}void add_col(bool *mtx)

if(sz != fir) l[fir+1] = sz, r[sz] = fir+1;

}void remove(int r)

void resume(int r)

int dfs(int d)

resume(r);

return

0; }

void work()

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

putchar('\n');

}}solver;

int id(int x, int y)

bool ok(int x, int y, int z)

void initialize()

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

for(int j = 1; j <= 9; j++)

if(sdk[i][j])

memset(need0, 0, sizeof need0);

memset(needr, 0, sizeof needr);

memset(needc, 0, sizeof needc);

memset(needb, 0, sizeof needb);

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

for(int j = 1; j <= 9; j++)

}void add_col()

}}int main()

return

0;}

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...

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.我們...