程式設計題 判斷數獨是否正確

2021-10-24 09:57:54 字數 1883 閱讀 6161

緒論目錄

判斷數獨是否正確

數獨定義

邏輯分析

矩陣遍歷

行遍歷列遍歷

總** 測試

注:該文中用 0 表示空格,未填寫,因為方格中只能填入 [1,9]

話不多說,先上圖

如果你是第一次用程式的角度來做這道題,不用每乙個方格都去判斷方格所在行列以及矩陣無重複元素,這樣其實做了大量的重複操作,我們需要的是一步到位,簡單便捷。

行列無重複元素:遍歷對角線,時間複雜度o(n),可以遍歷到每一行每一列。

小矩陣無重複元素:將大矩陣劃分為9個小矩陣,小矩陣中遍歷一次判斷有無重複元素。時間複雜度o(n*n)

行列遍歷的原理:

這裡通過對角線,遍歷了整個每行每列。當然你可以拆分成單獨遍歷一次每行,一次每列。差別不大

這裡我將四重迴圈寫成了雙重

/**

* 檢查小矩陣內的數字

* @return 布林值

*/public static boolean checksubmatrix(int matrix)

}x++;

if (x>=3)

}return flag;

}

這裡我解釋一下上面**的變數:

第乙個小矩陣:x:[0,3) y:[0,3)

第乙個小矩陣:x:[3,6) y:[3,6)

矩陣的橫/縱座標開始可表示為 3*0 3*1 3*2,當然這裡因為數獨,直接將3寫死,因為數獨是9*9的矩陣。

每個小矩陣的邊長都是三,startx和starty為指標,通過乙個while進行遍歷矩陣

/**

* 檢查某行是否滿足

* @param row 一行的陣列

* @return 布林值

*/public static boolean checkx(int row)

}x++;

if (x>=3)

}return flag;}}

public class executemainn ,,,

,,,,

,};system.out.println(check(matrix));

int y = 0;

int x = 0;

while(y<9)}}

}

控制台

小矩陣正常

true

4 0 1 0 0 7 2 0 0

0 0 5 0 0 6 9 0 1

0 6 0 0 1 4 0 0 7

6 0 9 0 3 8 0 0 0

0 0 0 6 0 0 0 5 8

0 5 3 7 0 0 0 9 0

9 1 0 0 7 0 0 0 0

0 4 0 0 2 0 1 0 0

0 0 0 1 0 0 0 7 3

process finished with exit code 0

可以看到,首先進行的小矩陣判斷,為真,才開始判斷的行和列。【這裡我沒有對行列判斷和小矩陣判斷的複雜度分析,可以將複雜度低的先判斷】。

明顯可以看出列印出的矩陣是滿足數獨的。

判斷數獨是否正確

想必大家都玩過數獨吧 我竟沒玩過.錯誤!的思想 1,每列中包含1 9 2,每行中包含1 9 後來才知道原來只滿足這兩個條件並不能滿足每乙個九宮格中包含1 9 正解!1,每列中包含1 9 2,每行中包含1 9 3.每個九宮格中包含1 9 include include include include ...

(C語言)判斷數獨是否正確

數獨是源自18世紀瑞士的一種數學遊戲。是一種運用紙 筆進行演算的邏輯遊戲。玩家需要根據9 9盤面上的已知數字,推理出所有剩餘空格的數字,並滿足每一行 每一列 每乙個粗線宮 3 3 內的數字均含1 9,不重複。當然,肯定不會讓你用程式完成沒填好的數獨的。現在給你乙個9 9填滿了數的格仔,想讓你檢查一下...

389 判斷數獨是否合法

5.5 很神奇的使用了map陣列,感覺自己的路子簡直是有點兒野。map陣列的定義方式為 hashmap map2 new hashmap 2 9 for int i 0 i 2 i 判斷數獨是不是合法,要判斷同一行,同一列,以及同乙個九宮之內是不是有相同的數。雖然ac了,但是提示我的編譯是有錯誤的。...