搜尋高階 數獨問題

2021-09-10 14:01:15 字數 1435 閱讀 3594

這道題目是比較經典的搜尋問題,當你學會怎麼解八皇后問題的時候,就慢慢的進入了搜尋之道,這一道題目比較難的點就是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的地方就是需要填充的數字。輸出描述 輸出九行,每行九個...