POJ2676 Sudoku 詳解優化

2021-10-17 23:36:12 字數 680 閱讀 6203

思路是很簡單的,類似於八皇后問題;

暴力搜:用h[i][j]標記第i行中是否存在j;同理,l[i][j]標識第i列中是否存在j;k[i][j]第i個方塊中是否存在j;

難的是如何進行剪枝,可行的乙個方法是記錄每個初始為0的點的座標與可能放置的數字的個數,從少往多遍歷,這樣能有效的減小搜尋樹的規模。

(剪枝優化待更新~~)

#include

using namespace std;

/**/

int g[10][10];

bool h[10][10];//第i行是否含有j

bool l[10][10];//第i列是否含有j

bool k[10][10];//第k個九宮格~

bool flag;

void dfs(int x,int y)

if(x>=10)

int main()

int f=0;

if(isdigit(c))f=c-'0';

g[i][j]=f;

if(g[i][j]!=0)

} if(!judge)break;

}if(!judge)break;

dfs(1,1);

} return 0;

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

POJ 2676 Sudoku 數獨 解題報告

搜尋依舊寫的稀爛。大概就是數獨吧。橫 數 小九宮格內不重複。這種題主要的手法還是搜尋 暴力列舉。這道題主要的難點是以什麼為單位開始搜 其實也不難 以及怎麼設定vis剪枝。在這裡,我選擇了以搜尋二叉樹構建的map來記錄vis 畢竟map查詢起來較容易 將9個小九宮格 每行 每列各構建乙個map來記錄,...

POJ2676 Sudoku CH 搜尋 例題

題目大意就是讓你完成乙個數獨。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 分別表示當前行,列...