#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 判斷當前位...