37. Sudoku Solver
来源:互联网 发布:mac 隐藏dock 快捷键 编辑:程序博客网 时间:2024/05/16 02:09
题目:Sudoku Solver
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.
思路:
回溯法尝试所有解。如果遇到的是空白,即“.””,就从1-9之间逐个尝试,每尝试一个数,检查这个值所在的行是否符合,检查这个值所在的列是否符合,同时检查这个值所在的
那个九宫格是否符合(int m=v/3*3; int n=h/3*3,因此m和n是这个九宫格的第一个格子)。
注意:只有正确达到最终81位置(即成功填充)的填充结果才可以返回,若不然,将会得到错误的填充。
因此辅助函数solve需要设为bool而不是void
代码:
bool check(char** board,int p);bool resolve(char** board,int p);void solveSudoku(char** board, int boardRowSize, int boardColSize) { //printf("The v is %d, the h is %d\n",boardRowSize,boardColSize); resolve(board,0); }bool resolve(char** board,int p){ if(p==81) //一定要放在第一行,因为如果等于81的时候,就是第9行超出board的行列,会出现runtime error return true; int i=0; int v=p/9; int h=p%9; char target=board[v][h]; if(target == '.') { for(i=1;i<=9;i++) //存放的数字是1-9 { board[v][h]=i+'0'; if( check(board,p)) if(resolve(board,p+1) ) return true; board[v][h]='.'; } } else { if( resolve(board,p+1) ) return true; } //printf("The v is %d,the h is %d\n",v,h); return false; }bool check(char** board,int p){ int v=p/9; int h=p%9; char target=board[v][h]; // for(int i=0;i<9;i++) { if( (h != i) && (board[v][i] == target) ) return false; if( (v != i) && (board[i][h] == target) ) return false; } int r=v/3*3; int c=h/3*3; for(int m=r;m<r+3;m++) for(int n=c;n<c+3;n++) { if((m != v && n != h) && (target == board[m][n]) ) { return false; } } return true; }
0 0
- LeetCode --- 37. Sudoku Solver
- LeetCode 37.Sudoku Solver
- [Leetcode] 37. Sudoku Solver
- 37. Sudoku Solver
- 37. Sudoku Solver(Hard)
- [leetcode] 37. Sudoku Solver
- Leetcode 37. Sudoku Solver
- 37. Sudoku Solver
- leetcode 37. Sudoku Solver
- 37. Sudoku Solver
- 37. Sudoku Solver
- LeetCode 37. Sudoku Solver
- 37. Sudoku Solver
- leetcode.37. Sudoku Solver
- LeetCode-37.Sudoku Solver
- leetcode 37. Sudoku Solver
- (Leetcode)37. Sudoku Solver
- 37. Sudoku Solver
- 5-5 城市间紧急救援 (25分)【最短路spfa】
- 分别统计中文、英文、数字的个数
- iOS 底层实现 - Block
- 数据结构 折半递归查找,二叉排序树查找
- 开始自己的无人车学习之路
- 37. Sudoku Solver
- JAVA4种内部类详解
- SyntaxError: identifier starts immediately after numeric literal
- 5-3 旅游规划
- 微信小程序学习(二)之scroll-view组件
- CICS Abend AD2R
- 上下文切换详解
- 初识Unity 3D——小小小Demo(上)
- Java1.5语法糖的味道--泛型与擦除小结(三)