package com.interview.leetcode.backtracing;
import com.interview.utils.ConsoleWriter;
/**
* Created_By: stefanie
* Date: 14-11-24
* Time: 下午4:50
*/
public class SudokuGame {
char[][] board;
public void solveSudoku(char[][] board){
this.board = board;
solve();
}
public boolean solve(){
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
if(board[i][j] != '.') continue;
for(char k = '1'; k <= '9'; k++){
if(!valid(i, j, k)) continue;
board[i][j] = k;
if(solve()) return true;
else continue;
}
board[i][j] = '.';
return false;
}
}
return true;
}
public boolean valid(int x, int y, char k){
for(int i = 0; i < 9; i++){
if(board[x][i] == k) return false;
if(board[i][y] == k) return false;
}
int row = x / 3;
int col = y / 3;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(board[row * 3 + i][col * 3 + j] == k) return false;
}
}
return true;
}
public static void main(String[] args){
String[] data = new String[]{"..9748...","7........",".2.1.9...","..7...24.",".64.1.59.",".98...3..","...8.3.2.","........6","...2759.."};
char[][] board = new char[9][9];
for(int i = 0; i < 9; i++){
board[i] = data[i].toCharArray();
}
SudokuGame game = new SudokuGame();
game.solveSudoku(board);
ConsoleWriter.printIntArray(board);
}
}