Java基礎3——檢查數獨的解決方案是否正確,兩種方法
/** 數獨是一個9x9網格,被分為9個3x3的塊。 將1~9輸入格子裡,使每行每列及每塊都包含1~9九個數字。 檢查數獨的解決方案是否正確有兩種方法: 方法1:檢查是否每行每列每塊都有1~9; 方法2:檢查每個單元格,數字必須是1~9,且該數字在每行每列每塊都是唯一的。 */ /*有效的數獨 9 6 3 1 7 4 2 5 8 1 7 8 3 2 5 6 4 9 2 5 4 6 8 9 7 3 1 8 2 1 4 3 7 5 9 6 4 9 6 8 5 2 3 1 7 7 3 5 9 6 1 8 2 4 5 8 9 7 1 3 4 6 2 3 1 7 2 4 6 9 8 5 6 4 2 5 9 8 1 7 3 */ import java.util.Scanner; public class CheckSudokuSolution { public static void main(String[] args) { //讀取數獨解決方案 int[][] grid=readASolution(); //列印結果 System.out.println("方法1:"+(isValid1(grid)?"Valid Solution": "Invalid Solution")); System.out.println("方法2:"+(isValid2(grid)?"Valid Solution": "Invalid Solution")); } //從控制檯讀取數獨解決方案 public static int[][] readASolution(){ Scanner input=new Scanner(System.in); System.out.println("Enter a Sudoku puzzle solution:"); int[][] grid=new int[9][9]; for(int i=0;i<9;i++) for(int j=0;j<9;j++) grid[i][j]=input.nextInt(); return grid; } //方法1: //將每列數字儲存至一個二維陣列,通過將橫縱座標交換 public static int[][] column(int[][] grid){ int[][] c=new int[9][9]; for(int i=0;i<9;i++) for(int j=0;j<9;j++) c[i][j]=grid[j][i]; return c; } //將每塊的數字儲存至一個二維陣列 public static int[][] block(int[][] grid){ int[][] b=new int[9][9]; for(int i=0;i<9;i++) for(int j=0;j<9;j++){ //將數獨從左至右從上至下分為9塊,求該單元格屬於第幾塊,將該塊數字儲存至b第幾行 int rowOfB=i/3*3+j/3; //每塊有9個數字,求該數字屬於第幾個,儲存至b第幾列 int columnOfB=i%3*3+j%3; b[rowOfB][columnOfB]=grid[i][j]; } /*檢查塊數字轉變為二維陣列的每一行,是否正確 for(int row=0;row<9;row++){ for(int col=0;col<9;col++) System.out.print(b[row][col]+" "); System.out.println( ); } */ return b; } //檢查一個長度為9的陣列是否只包含1~9 public static boolean checkNumber1(int[] matrix){ //宣告一個包含9個元素的陣列,每個元素都初始化為0 int[] temp=new int[9]; for(int i=0;i<9;i++) temp[i]=0; for(int i=0;i<9;i++){ //檢查matrix的每個元素是否在1~9之間,如果是,則將temp的第matrix[i]-1個數字置為1 //當且僅當temp每個數字均為1時,matrix的元素包含1~9的每個數字 if(matrix[i]>0&&matrix[i]<10) temp[matrix[i]-1]=1; } for(int i=0;i<9;i++){ //如果temp不全為1,則返回false if(temp[i]!=1) return false; } return true; } //檢查一個9*9的二維陣列每行是否只含1~9 public static boolean checkNumber2(int[][] secMatrix){ for(int i =0;i<9;i++) if(!checkNumber1(secMatrix[i])) return false; return true; } public static boolean isValid1(int[][] grid){ //檢查每行數字是否都有1~9 if(!checkNumber2(grid)) return false; //檢查每列數字是否都有1~9 int[][] columnMatrix=column(grid); if(!checkNumber2(columnMatrix)) return false; //檢查每塊數字是否都有1~9 int[][] blockMatrix=block(grid); if(!checkNumber2(blockMatrix)) return false; return true; } //方法2: public static boolean isValid2(int[][] grid){ //依次檢查每個單元格的數字是否在1~9之間,及該數字在每行每列每塊是否唯一 for(int i=0;i<9;i++) for(int j=0;j<9;j++) if(grid[i][j]<1||grid[i][j]>9||!isOnly(grid,i,j)) return false; return true; } public static boolean isOnly(int[][] grid,int i,int j){ //檢查每行中該數字是否唯一 for(int col=0;col<9;col++) if(col!=j&&grid[i][col]==grid[i][j]) return false; //檢查每列中該數字是否唯一 for(int row=0;row<9;row++) if(row!=i&&grid[row][j]==grid[i][j]) return false; //檢查每塊中該數字是否唯一 for(int row=i/3*3;row<i/3*3+3;row++) for(int col=j/3*3;col<j/3*3+3;col++){ if(row!=i&&col!=j&&grid[row][col]==grid[i][j]) return false; } return true; } }
相關推薦
Java基礎3——檢查數獨的解決方案是否正確,兩種方法
/** 數獨是一個9x9網格,被分為9個3x3的塊。 將1~9輸入格子裡,使每行每列及每塊都包含1~9九個數字。 檢查數獨的解決方案是否正確有兩種方法: 方法1:檢查是否每行每列每塊都有1~9; 方法2:檢查每個單元格,數字必須是1~9,且該數字在每行每列每塊都是唯一的。
Mysql使用binlog恢復數據解決誤操作問題的兩種方法
tle osi net 回滾 href bsp databases affect 恢復 為保證沒有其他參數配置影響,重新安裝配置了一臺最小化安裝的CentOS7虛擬機 1. 基礎知識? 安裝mysql5.6數據庫Mysql binlog初步理解 2. 配置mysql 開啟
vue+django跨域問題解決方案(前後端兩種方案)
1.Vue前端設定代理(方案一) 我們在使用vue-cli啟動專案的時候npm run dev便可以啟動我們的專案了,通常我們的請求地址是以localhost:8080來請求介面資料的,localhost是沒有辦法設定cookie的。 我們可以在vu
Java基礎知識複習(八)-- 遍歷ArrayList的三種方法
第一種遍歷 普通for迴圈 可以用size()和get()分別得到大小,和獲取指定位置的元素,結合for迴圈就可以遍歷出ArrayList的內容 第二種遍歷,使用迭代器 從最開始的位置判斷"下一個"位置是否有資料,如果有就通過next取出來,並且把指標向
SA:T1編寫主函數法和T2Matlab自帶的SA工具箱GUI法,兩種方法實現對二元函數優化求解——Jason niu
lin plot itl 最優解 IT 主函數 alt 圖片 gui %SA:T1法利用Matlab編寫主函數實現對定義域[-5,5]上的二元函數求最優解—Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 +
java graphics drawline (make line bold, 使線變粗,兩種方式)
class ArcsPanel extends JPanel { protected void paintComponent(Graphics g) { super.paintComp
初學Java多執行緒:從執行緒返回資料的兩種方法
從執行緒中返回資料和向執行緒傳遞資料類似。也可以通過類成員以及回撥函式來返回資料。但類成員在返回資料和傳遞資料時有一些區別,下面讓我們來看看它們區別在哪。 一、通過類變數和方法返回資料 使用這種方法返回資料需要在呼叫start方法後才能通過類變數或方法得到資料。讓我們先來看
Java小程式之句子每個單詞首字母大寫(兩種方法)
題目:用Java編寫一個將輸入的英文句子每個單詞首字母變為大寫的小程式。 程式碼如下: 檔名:CapitalizeTheFirstLetter.java public class CapitalizeTheFirstLetter { /**
apache+php完美解決301重定向的兩種方法
<?php $the_host = $_SERVER['HTTP_HOST']; $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; switch ($the_host) { case "www.
Android apk安裝過程及Java、JNI讀取安裝包內assets資原始檔的兩種方法(附原始碼例項)
問題背景:在PC上的程式可以輕鬆使用./或不用指明,預設讀取的就是程式所在路徑內的檔案。但在Android上,應用程式被打包成apk,程式執行時無法直接獲取apk(壓縮包)內的檔案。但在一些特殊場合,如載入影象處理訓練好的分類器、模型等資料,要求每個apk到手機上都能執行,就
java 中去除字串中的空格,兩種方法
/** * 去除字串中的所有空格 * @author Administrator * */ public class StringTo { public static void main(String[] args) { /** * 第一種方法 Stri
Java程式碼中獲取配置檔案(config.properties)中內容的兩種方法
方法千千萬,本人暫時只總結了兩種方法。 (1) config.properties中的內容如圖 在applicationContext.xml中配置 <!-- 引入配置檔案 --> <bean id="configProperties" cl
jqueryURL中引數中解決中文亂碼問題的兩種方法
一、正則分析法function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&a
java 判斷對象是否是某個類的類型兩種方法
判斷 如果 一個 ava 布爾值 als 布爾 子類 null 第一種: instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。 用法: result
Dynamic Web Module 3.1 requires Java 1.7 or newer. 錯誤解決方案
pom.xml文件 artifact logs per group -s conf 你會 cti 在寫代碼的時候工程出現了這樣奇怪的bug很是蛋疼啊,經過查詢解決方法,終於解決了這些個問題。 下面是解決問題的方法,和大家分享一下 (1)確定你的java工程配置使用了java
java基礎3
java基礎1.二維數組 定義:元素為一維數組的數組。 動態初始化方式一(指定有多少個長度相同的一維數組): 數據類型[][] 變量名 = new 數據類型[m][n]; m表示有多少個一維數組 n表示一維數組中有多少個元素 動態初始化方式二
Day3 - Python基礎3 函數、遞歸、內置函數
輸出 proc 內存 roc -- python 一個 重復 spa 1.函數基本語法及特性 函數是什麽? 函數一詞來源於數學,但編程中的「函數」概念,與數學中的函數是有很大不同的,具體區別,我們後面會講,編程中的函數在英文中也有很多不同的叫法。在BASIC中叫做subro
Step3- Python基礎3 函數、遞歸、內置函數
方法 efi brush 內置 logs python 基本語法 內置函數 關鍵字 一、函數基本語法及特性 Python中函數的定義方法: def test(x): #定義函數的關鍵字,()內可定義形參 "The function definitions" #文檔
Python基礎3 函數、遞歸、內置函數
python 函數本節內容1. 函數基本語法及特性2. 參數與局部變量3. 返回值嵌套函數4.遞歸5.匿名函數6.函數式編程介紹7.高階函數8.內置函數溫故知新1. 集合主要作用: 去重關系測試, 交集\差集\並集\反向(對稱)差集>>> a = {1,2,3,4} >>>
hive加載json數據解決方案
lena bash 文件 min blog ash eve 視圖 題解 hive官方並不支持json格式的數據加載,默認支持csv格式文件加載,如何在不依賴外部jar包的情況下實現json數據格式解析,本編博客著重介紹此問題解決方案 首先創建元數據表: create EX