c 暴力解數獨

2021-10-25 05:43:55 字數 1794 閱讀 9013

#include

using

namespace std;

class

sudoku

;//儲存空格資訊(座標、試到哪個數了)及長度

int flag[81]

[3]=

;int length =0;

//判斷該座標上是否能放num這個數

bool

suitable

(int i,

int j,

int num)

//判斷行列及乙個九宮格內是否重複

for(

int k =

0; k <

9; k++)}

int a =

(i /3)

*3, b =

(j /3)

*3;for

(int k = a; k < a +

3; k++)}

}return

true;}

public

:sudoku()

}}}void

printdata()

} cout << endl;if(

(i +1)

%3==0

)}}void

solve()

bool f =

true

;while(!

suitable

(flag[i][0

], flag[i][1

], flag[i][2

]))}

if(f ==

true)}

}};int

main()

/*測試用例

9 5 0 0 0 4 0 0 8

2 4 6 0 7 0 0 5 9

7 8 0 6 0 9 2 3 4

8 6 0 7 1 3 0 0 2

3 0 0 0 0 0 0 0 7

1 0 0 9 4 2 0 8 3

5 9 8 2 0 6 0 7 1

4 1 0 0 8 0 3 9 6

6 0 0 4 0 0 0 2 5

6 0 0 3 0 5 0 2 0

8 4 2 0 6 0 0 0 0

0 0 0 0 2 0 1 0 6

0 9 0 0 0 0 8 6 2

0 3 0 8 0 2 0 0 9

0 0 8 1 0 0 0 7 0

0 2 0 0 1 0 0 0 5

5 0 3 0 7 0 6 0 0

0 0 0 9 0 3 0 4 0

5 0 0 0 0 0 0 4 8

0 6 0 0 4 0 0 0 0

0 0 0 0 3 5 0 2 0

0 0 9 0 5 0 7 0 0

0 0 0 9 0 0 6 0 0

8 0 0 2 7 0 0 0 0

0 0 0 0 0 1 0 0 7

4 0 8 0 0 0 0 0 5

0 0 3 4 0 9 0 0 0

*/

蛤蛤這個還挺有意思的,老媽突然又玩起數獨了,奈何玩不過她,只好自己動手豐衣足食。倒也沒想象中麻煩,我這用的是暴力的方法,每個空白格仔都從1-9去試,1-9都不行則倒回上乙個空白格繼續試。理論上用遞迴寫的會更加簡潔,奈何我寫遞迴總是反應不過來,最後還是用迴圈寫了。嗯,就這麼多。

解數獨演算法 C 實現

時間比較倉促,未優化。大牛看客,勿笑話。當然有好的建議,我洗耳恭聽。若有時間再用mfc寫乙個介面。好了,廢話不多說,如下 include using namespace std 可選數字 int candidate 標記這個空格是否為原始資料 int g a 9 9 列印函式 void print ...

解數獨演算法 C 實現

時間比較倉促,未優化。大牛看客,勿 笑話。當然有好的建議,我洗耳恭聽。若有時間再用mfc寫乙個介面。好了,廢話不多說,如下 include using namespace std 可選數字 int candidate 標記這個空格是否為原始資料 int g a 9 9 列印函式 void print...

構造解數獨

public class sudoku 尋找橫座標下一位置 int findx int x,int y 尋找縱座標下一位置 int findy int x,int y 輸出完成的數獨矩陣 void sdprint system.out.print n system.out.print n 判斷當前位...