參考鏈結來自於
輸入乙個數獨作為9*9的陣列,例如輸入乙個測試資料map[9][9]為:
0 9 0 0 0 0 0 6 0
8 0 1 0 0 0 5 0 9
0 5 0 3 0 4 0 7 0
0 0 8 0 7 0 9 0 0
0 0 0 9 0 8 0 0 0
0 0 6 0 2 0 7 0 0
0 8 0 7 0 5 0 4 0
2 0 5 0 0 0 8 0 7
0 6 0 0 0 0 0 9 0
解決思路為:設定乙個count來計數,當count=81的時候,遍歷完整個陣列,這時可以輸出結果;
從左上角的數字開始,如果該數為0,則在這個位置從1開始填,這時檢查填入的數字能否填入,1沒在第一行**現,也沒在第一列**現,但是在3*3的格仔**現了,則這個位置變為2;再次檢查2是否能填入,同理,發現也不能填入,則變成3,發現3可以填入。
以此類推,可以將第一行填滿。當遇到衝突發現不能填數字時,將該位置變成0,再返回上乙個數,將其+1;就是這樣乙個不斷試值不斷重複迭代,遇到衝突,返回糾錯然後再迭代的過程。
**理解:
void backtrace(int count)
cout << endl;
} return;
} int row = count / 9;
int col = count % 9;
//如果該位置為0,
if (map[row][col] == 0)
}map[row][col] = 0;
} //如果該位置不為0,則直接對下個位置的進行操作
else
}
bool isplace(int count)
} //判斷填入的數是否在該列
for (j = 0; j < 9; ++j) }
//判斷填入的數是否在3*3的小框中
int temprow = row / 3 * 3;
int tempcol = col / 3 * 3;
for (j = temprow; j < temprow + 3; ++j)
}} return true;
}
輸出為:
7 9 3 8 5 1 4 6 2
8 4 1 2 6 7 5 3 9
6 5 2 3 9 4 1 7 8
3 2 8 4 7 6 9 5 1
5 7 4 9 1 8 6 2 3
9 1 6 5 2 3 7 8 4
1 8 9 7 3 5 2 4 6
2 3 5 6 4 9 8 1 7
4 6 7 1 8 2 3 9 5
第一次寫blog,如有錯誤,請多指教!~
數獨問題(DFS 回溯)
數獨遊戲的規則是這樣的 在乙個9x9的方格中,你需要把數字1 9填寫到空格當中,並且使方格的每一行和每一列中都包含1 9這九個數字。同時還要保證,空格中用粗線劃分成9個3x3的方格也同時包含1 9這九個數字。比如有這樣乙個題,大家可以仔細觀察一下,在這裡面每行 每列,以及每個3x3的方格都包含1 9...
C語言中的數獨問題(回溯)
描述 數獨遊戲規則 在9階方陣中,包含了81個小格 九列九行 其中又再分成九個小正方形 稱為宮 每宮有九小格。遊戲剛開始時,盤面上有些小格已經填了數字 稱為初盤 遊戲者要在空白的小格中填入1到9的數字,使得最後每行 每列 每宮都不出現重複的數字,而且每乙個遊戲都只有乙個唯一的解答 稱為終盤 輸入 乙...
回溯演算法python 數獨問題 回溯演算法經典例題
之前我們已經簡單地說明了怎樣用回溯演算法解決數獨的問題,思路如下 從第乙個空格開始。依次嘗試 1 到 9 的數字,如果數字與盤面衝突就換成下乙個數字,如果不衝突就去往第二個空格 在第二個空格,同樣依次嘗試 1 到 9 的數字,如果與盤面衝突就換成下乙個數字,如果不衝突就去往第三個空格,以此類推 當最...