【leetcode】Sudoku Solver
2015-04-24 19:47
155 查看
【leetcode】Sudoku Solver
题目如上,我先说一句实话,在想算法和实现的过程中,遇到各种小错误。
写算法和做应用程序实在是不同,平时做个应用,借助各种工具还能debug个所以然来,
可是写算法题目要么想不出,想出了debug起来和再重新想一遍根本没差别……
折腾了两小时总算是把这个心结解开了。
题目用的是回溯法。其实不论是回溯法还是DP(我是指这一类绕来绕去的),想清楚出口,
参数,当前状态,状态处理(状态处理要记得非法数据清除!!)几个点,那么问题也就迎刃而解。
class Solution { private: char res[9][9]; public: void findNextPoint(int &row,int &col,vector<vector<char> > &b) { int i=row,j=col+1; while(1) { if(j==9) { j=0; ++i; } if(i==9 || b[i][j]=='.') { row=i; col=j; break; } ++j; } } bool isLegal(int k,int row,int col) { //col and row for(int q=0;q<9;++q) if(res[row][q]=='0'+k || res[q][col]=='0'+k) return false; //3*3 int qb,pb; qb=row/3; qb*=3; pb=col/3; pb*=3; for(int q=qb;q<qb+3;++q) for(int p=pb;p<pb+3;++p) if(res[q][p]=='0'+k) return false; return true; } bool solve(int row,int col,int key,vector<vector<char> > &b) { if(row==9) { for(int x=0;x<9;++x) { for(int y=0;y<9;++y) b[x][y]=res[x][y]; } return true; } if(isLegal(key,row,col)) { res[row][col]='0'+key; findNextPoint(row,col,b); for(int k=1;k<10;++k) if(solve(row,col,k,b)) return true; } res[row][col]='.'; return false; } void solveSudoku(vector<vector<char> > &board) { for(int i=0;i<9;++i) for(int j=0;j<9;++j) res[i][j]=board[i][j]; int row=0,col=0; for(bool flag=false;row<9;++row) { for(;col<9;++col) if(board[row][col]=='.') { flag=true; break; } if(flag) break; } for(int k=1;k<10;++k) if(solve(row,col,k,board)) return; } };
相关文章推荐
- leetcode: Sudoku Solver
- Leetcode-37: Sudoku Solver
- [LeetCode] 112: Sudoku Solver
- LeetCode 37. Sudoku Solver
- [LeetCode]Sudoku Solver
- LeetCode解题笔记37 Sudoku Solver
- LeetCode-37. Sudoku Solver (JAVA)(数独游戏解集)
- leetcode---Sudoku Solver---深搜
- leetcode -- Sudoku Solver -- 经典重点
- LeetCode - Sudoku Solver
- [leetcode]Sudoku Solver
- LeetCode - Sudoku Solver
- [leetcode]Sudoku Solver
- Leetcode224: Sudoku Solver
- LeetCode Online Judge 题目C# 练习 - Sudoku Solver
- Leetcode: 37. Sudoku Solver
- LeetCode 36. Sudoku Solver
- [Leetcode] Sudoku Solver
- [Leetcode 103] 37 Sudoku Solver
- leetcode第一刷_Sudoku Solver