数独题,经典的回溯法求解,思路比较简单
遍历整个数组,如果是数字,就跳过,访问下一个,如果是?,就用数字1-9去试探,当整张表都遍历完了,结果就出来了。
我设置了一个res变量来统计解的情况,如果res = 1了,就代表找到一组解了然后就直接return了。如果是无解的情况的话,那么res=0;
要注意的一点就是关于判断是否可以放的方法
我这里用的是三个布尔型的数组
boolean[][] rowUsed = new boolean[9][10];
boolean[][] colUsed = new boolean[9][10];
boolean[][][] boxUsed = new boolean[3][3][10];
rowUsed 和 colUsed比较简单,boxUsed的判断方法如下:
将数独的棋盘分为9个九宫格, boxUsed[row/3][col/3][num],
例如:当row = 2, col = 2 的时候,就代表的是第一个九宫格,以此类推
不要将下面的代码拿到HDU去提交,因为会wa,我也不知道为什么
package 搜索.一般.回溯.HDU1426_数独;
import java.util.Scanner;
public class Main {
static int res = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;
char[][] board = new char[9][9];
while(sc.hasNext()) {
for (int i = 0; i < 9; i++) {
String t = sc.nextLine();
t = t.replaceAll(" ","");
//System.out.println(t);
board[i] = t.toCharArray();