码迷,mamicode.com
首页 > 其他好文 > 详细

37. Sudoku Solver

时间:2017-03-19 11:03:00      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:思路   ted   利用   one   img   修改   ber   false   commons   

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character ‘.‘.

You may assume that there will be only one unique solution.

技术分享

A sudoku puzzle...

 

技术分享

...and its solution numbers marked in red.

 

本题比较难,思路和Sudoku不太一样,因为这个题目要求的是解决这个问题,那么如何解决呢,我们可以利用把char插入到‘.’的位置后,是否为有效来进行判断,但是判断的方法和之前的那道题不一样,我们只要考虑同一行,同一列,同一个正方形里面是否有这个char就可以了。判断第i,j个位置发现符合要求后,把board[i][j]的位置进行修改,然后递归这个solve函数,如果solve是true的,那么就是valid的,否则不是valid,就把board[i][j]的位置清空为‘.’,其实这道题就是不断判断是否valid的过程,代码如下:

 1 public class Solution {
 2     public void solveSudoku(char[][] board) {
 3         if(board==null||board.length==0) return;
 4         solve(board);
 5     }
 6     public boolean solve(char[][] board){
 7         for(int i=0;i<board.length;i++){
 8             for(int j=0;j<board[0].length;j++){
 9                 if(board[i][j]==‘.‘){
10                     for(char k=‘1‘;k<=‘9‘;k++){
11                         if(isvalid(board,i,j,k)){
12                             board[i][j] = k;
13                             if(solve(board)) return true;
14                             else board[i][j] = ‘.‘;
15                         }
16                     }
17                     return false;
18                 }
19             }
20         }
21         return true;
22     }
23     public boolean isvalid(char[][] board,int row,int col,char c){
24         for(int i=0;i<9;i++){
25             if(board[i][col]!=‘.‘&&board[i][col]==c) return false;
26             if(board[row][i]!=‘.‘&&board[row][i]==c) return false;
27             if(board[row/3*3+i/3][col/3*3+i%3]!=‘.‘&&board[row/3*3+i/3][col/3*3+i%3]==c) return false;
28         }
29         return true;
30     }
31 }

 

37. Sudoku Solver

标签:思路   ted   利用   one   img   修改   ber   false   commons   

原文地址:http://www.cnblogs.com/codeskiller/p/6577870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!