解數(shù)獨(dú)的java程序

題目描述:編寫一個程序熔酷,通過已填充的空格來解決數(shù)獨(dú)問題吵聪。

一個數(shù)獨(dú)的解法需遵循如下規(guī)則:

數(shù)字?1-9?在每一行只能出現(xiàn)一次。

數(shù)字?1-9?在每一列只能出現(xiàn)一次。

數(shù)字?1-9?在每一個以粗實(shí)線分隔的?3x3?宮內(nèi)只能出現(xiàn)一次捻爷。

空白格用?'.'?表示。


待解數(shù)獨(dú)

示例


待求數(shù)獨(dú)

Java代碼

class Solution {

???int n = 3;

???????int N = n * n;

???????int[][] rows = new int[N][N+1];

???????int[][] columns = new int[N][N+1];

???????int[][] boxes = new int[N][N+1];

???????char[][] board;

???????boolean sudokuSolved = false;


???????public boolean couldPlace(int d,int row,int col) {

???????????//check if one could place a number in (row,col) cell

???????????int idx = (row / n) * n + col / n;

???????????return rows[row][d] + columns[col][d] + boxes[idx][d] == 0;

???????}


???????public void placeNumber(int d,int row,int col) {

???????????// place a number d in (row,col) cell

???????????int idx = (row / n) * n + col / n;

???????????rows[row][d]++;

???????????columns[col][d]++;

???????????boxes[idx][d]++;

???????????board[row][col] = (char)(d+'0');??

???????}


???????public void removeNumber(int d,int row,int col) {

???????????//remove a number which didn't lead to a asolution

???????????int idx = (row / n) * n + col /n;

???????????rows[row][d]--;

???????????columns[col][d]--;

???????????boxes[idx][d]--;

???????????board[row][col] = '.';

???????}


???????public void placeNextNumbers(int row,int col) {

???????????//call backtrack function in recursion to continue to place numbers tillthe moment we have a asolution

???????????//if we're in the end of therow,that means we have a solution

???????????if((col == N-1) && (row == N-1)) {

??????????????? sudokuSolved = true;

???????????}else {

??????????????? if(col == N - 1)backtrack(row+1,0);

??????????????? else backtrack(row,col+1);

???????????}

???????}


???????public void backtrack(int row,int col) {

???????????if(board[row][col] == '.') {

??????????????? //iterate over all numbers from1 to 9

??????????????? for(int d=1;d<10;d++) {

?????????????? ?????if(couldPlace(d,row,col)) {

??????????????????????? placeNumber(d,row,col);

???????????????????????placeNextNumbers(row,col);

??????????????????????? if(!sudokuSolved)removeNumber(d,row,col);

??????????????????? }

??????????????? }

???????????}else placeNextNumbers(row,col);

???????}

? public void solveSudoku(char[][] board) {

? ? this.board = board;

? ? // init rows, columns and boxes

? ? for (int i = 0; i < N; i++) {

? ? ? for (int j = 0; j < N; j++) {

? ? ? ? char num = board[i][j];

? ? ? ? if (num != '.') {

? ? ? ? ? int d = Character.getNumericValue(num);

? ? ? ? ? placeNumber(d, i, j);

? ? ? ? }

? ? ? }

? ? }

? ? backtrack(0, 0);

? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末觉痛,一起剝皮案震驚了整個濱河市役衡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薪棒,老刑警劉巖手蝎,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俐芯,居然都是意外死亡棵介,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門吧史,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邮辽,“玉大人,你說我怎么就攤上這事贸营《质觯” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵钞脂,是天一觀的道長揣云。 經(jīng)常有香客問我,道長冰啃,這世上最難降的妖魔是什么邓夕? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮阎毅,結(jié)果婚禮上焚刚,老公的妹妹穿的比我還像新娘。我一直安慰自己扇调,他們只是感情好矿咕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肃拜,像睡著了一般痴腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燃领,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天士聪,我揣著相機(jī)與錄音,去河邊找鬼猛蔽。 笑死剥悟,一個胖子當(dāng)著我的面吹牛灵寺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播区岗,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼略板,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慈缔?” 一聲冷哼從身側(cè)響起叮称,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藐鹤,沒想到半個月后瓤檐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娱节,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年挠蛉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肄满。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡谴古,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稠歉,到底是詐尸還是另有隱情掰担,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布怒炸,位于F島的核電站恩敌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏横媚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一月趟、第九天 我趴在偏房一處隱蔽的房頂上張望灯蝴。 院中可真熱鬧,春花似錦孝宗、人聲如沸穷躁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽问潭。三九已至,卻和暖如春婚被,著一層夾襖步出監(jiān)牢的瞬間狡忙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工址芯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灾茁,地道東北人窜觉。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像北专,于是被迫代替她去往敵國和親禀挫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容