POJ2676 Sudoku CH 搜尋 例題

2021-09-13 11:40:00 字數 1656 閱讀 5001

題目大意就是讓你完成乙個數獨。

emm這道題就是dfs

d fs

(x

)dfs(x)

dfs(x)

, x

xx表示當前搜到了第xxx行

然後開三個陣列v1[

i][k

]v1[i][k]

v1[i][

k],v 2[

j][k

]v2[j][k]

v2[j][

k],v 3[

i][j

][k]

v3[i][j][k]

v3[i][

j][k

] 分別表示當前行,列,塊(3∗3

3*33∗

3)的值為k

kk的數字可不可取

在d fs

dfsdf

s時回溯判斷即可。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clean(x, y) memset(x, y, sizeof(x))

const

int maxn =15;

const

int inf =

0x3f3f3f3f

;typedef

long

long ll;

using

namespace std;

template

<

typename t>

inline

void

read

(t &s)

while

(isdigit

(ch)

) s *

= w;

}int t;

int c[maxn]

[maxn]

;bool v1[maxn]

[maxn]

;bool v2[maxn]

[maxn]

;bool v3[5]

[5][maxn]

;bool flag;

void

dfs(

int x)

for(

int i = x; i <9;

++i)}if

(!iss)

return;}

else

if(i ==

8&& j ==8)

}}}int

main()

}}dfs(0)

;for

(int i =

0; i <9;

++i)

putchar

('\n');

}}return0;

}

POJ2676 Sudoku 詳解優化

思路是很簡單的,類似於八皇后問題 暴力搜 用h i j 標記第i行中是否存在j 同理,l i j 標識第i列中是否存在j k i j 第i個方塊中是否存在j 難的是如何進行剪枝,可行的乙個方法是記錄每個初始為0的點的座標與可能放置的數字的個數,從少往多遍歷,這樣能有效的減小搜尋樹的規模。剪枝優化待更...

POJ 2676 整數的個數

時間限制 1000ms 記憶體限制 65536kb 描述給定k 1輸入 輸入有兩行 第一行包含乙個正整數k,第二行包含k個正整數,每兩個正整數用乙個空格分開。輸出輸出有三行,第一行為1出現的次數,第二行為5出現的次數,第三行為10出現的次數。樣例輸入 51 5 8 10 5樣例輸出 121 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...