标签:style class blog code http color
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.
思路:这道题给你列出一些数字,然后完成后面的数独操作。首先我们定义一个函数判断每一行、每一列以及九宫格内是否存在相同的元素,如果存在则返回false;然后,对每一行每一列进行遍历,如果该位置为‘.‘时,按照1~9字符替换,并同时判断是否符合数独要求以及回溯遍历该数独,满足条件则返回true,如果不满足,则重新替换为‘.‘,再进行判断。
class Solution { public: bool IsSudoku(vector<vector<char> > &board,int x,int y) { int i,j; for(i=0;i<9;i++) { if(i!=x&&board[i][y]==board[x][y]) { return false; } } for(j=0;j<9;j++) { if(j!=y&&board[x][j]==board[x][y]) return false; } int m=(x/3)*3; int n=(y/3)*3; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if((i+m!=x)&&(j+n!=y)&&board[i+m][j+n]==board[x][y]) return false; } } return true; } bool Sudoku(vector<vector<char> > &board) { for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(board[i][j]==‘.‘) { for(char k=‘1‘;k<=‘9‘;k++) { board[i][j]=k; if(IsSudoku(board,i,j)&&Sudoku(board)) return true; board[i][j]=‘.‘; } return false; } } } return true; } void solveSudoku(vector<vector<char> > &board) { Sudoku(board); } };
标签:style class blog code http color
原文地址:http://www.cnblogs.com/awy-blog/p/3790650.html