題目大意就是讓你完成乙個數獨。
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...