這道題目是比較經典的搜尋問題,當你學會怎麼解八皇后問題的時候,就慢慢的進入了搜尋之道,這一道題目比較難的點就是33的格仔內填充的數不能重複。行和列不重複很簡單,怎麼判定重複與否,我們將數獨棋盤分為9個33的棋盤並且將其編號:
可以發現規律每乙個編號的33的格仔為當前的x,y
x / 3 * 3 + y / 3
我們可以在主函式裡通過設定判斷行,列,33格仔是否使用,visx[9][9]代表的是該行所用的數,比如visx[0][1]代表的是第0行已經存在數字1了,第0行則不能填充數字1了.visy[9][9]代表的是該列所用的數,比如visy[0][1]代表的是第0列已經存在數字1了,不能夠放數字一了,vis3[9][9]代表的是33的格仔中存放的數,比如vis3[0][1]代表在0編號中的33的格仔已經放了1了則在其餘8個格仔不能夠放1了。
for
(int i =
0; i <
9; i++)}
}
#include
#include
using
namespace std;
char map[9]
[9];
//數獨棋盤
bool visx[9]
[9],visy[9]
[9],vis3[9]
[9];
//visx表示為行的某個數是否使用,visy表示列的某個數是否使用,vis3表示3*3的小格仔
bool f;
void
dfs(
int x,
int y)
if(x ==9)
else}}
}if(y ==9)
if(map[x]
[y]!=
'*')
for(
int i =
1; i <=
9; i++)}
}int
main()
}for
(int i =
0; i <
9; i++)}
}dfs(0
,0);
return0;
}
歡迎關注blog:
www.lyxueit.com
大家一起學習交流。
數獨問題暴力搜尋
數獨問題在leetcode中有36 valid sudoku和37 sudoku solver兩道,數獨規則有三條 1.每一行數字在1 9不能重複。2.每一列數字在1 9不能重複。3.在所屬特定的3 3鄰域內的數字1 9不能重複。37.sudoku solver的要求是檢查當前數獨的合法性,採用暴力...
數獨高階版求解
請你將乙個16x16的數獨填寫完整,使得每行 每列 每個4x4十六宮格內字母a p均恰好出現一次。保證每個輸入只有唯一解決方案。輸入格式 輸入包含多組測試用例。每組測試用例包括16行,每行一組字串,共16個字串。第i個字串表示數獨的第i行。字串包含字元可能為字母a p或 表示等待填充 測試用例之間用...
數獨問題 解數獨
數獨是乙個非常有名的遊戲。整個是乙個9x9的大宮格,其中又被劃分成9個3x3的小宮格。要求在每個小格中放入1 9中的某個數字。要求是 每行 每列 每個小宮格中數字不能重複。現要求用計算機求解數獨。輸入描述 輸入9行,每行為空格隔開的9個數字,為0的地方就是需要填充的數字。輸出描述 輸出九行,每行九個...