思路是很簡單的,類似於八皇后問題;
暴力搜:用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 分別表示當前行,列...