建设一个网站需要多久,昆明seo博客,淘客网站开发,网易企业邮箱后缀编写一个程序#xff0c;通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 ‘.’ 表示。 Note: 给定的数独序…编写一个程序通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 ‘.’ 表示。 Note: 给定的数独序列只包含数字 1-9 和字符 ‘.’ 。 你可以假设给定的数独只有唯一解。 给定数独永远是 9x9 形式的。
代码
class Solution {MapInteger,HashSetInteger colnew HashMap();//记录行MapInteger,HashSetInteger rownew HashMap();//记录列MapInteger,MapInteger,HashSetInteger map3new HashMap();//记录3x3public void solveSudoku(char[][] board) {int nboard.length,mboard[0].length;for(int i0;in;i)row.put(i,new HashSet());for(int j0;jm;j)col.put(j,new HashSet());for(int i0;i3;i){map3.put(i,new HashMap());for(int j0;j3;j)map3.get(i).put(j,new HashSet());}for(int i0;in;i)for(int j0;jm;j)if(Character.isDigit(board[i][j]))//将已经填好的数据存进hashmap{col.get(j).add(board[i][j]-0);row.get(i).add(board[i][j]-0);map3.get(i/3).get(j/3).add(board[i][j]-0);}getSolveSudoku(board,0);}public boolean getSolveSudoku(char[][] board,int loc) {if(loc81) return true;int iloc/9,jloc%9;if(Character.isDigit(board[i][j])) {return getSolveSudoku(board, loc1);}else {for(int k1;k10;k)//遍历所有可能的情况{if(col.get(j).contains(k)||row.get(i).contains(k)|| map3.get(i/3).get(j/3).contains(k)) continue;//当前数字不满足col.get(j).add(k);row.get(i).add(k);map3.get(i/3).get(j/3).add(k);board[i][j](char) (k0);if(getSolveSudoku(board, loc1)) return true;board[i][j].;col.get(j).remove(k);//回溯map3.get(i/3).get(j/3).remove(k);row.get(i).remove(k);}return false;}}
}