本文共 1121 字,大约阅读时间需要 3 分钟。
class Solution {public: bool safe(vector>&board,int i,int j,int num) { for(int k=0;k<9;++k) { if(board[i][k]==num+'0' || board[k][j]==num+'0')return false; } int row = i/3; int col = j/3; for(int a=0;a<3;++a){ for(int b=0;b<3;++b){ if(board[3*row+a][3*col+b]==num+'0')return false; } } return true; } bool Is_true(vector >&board,int row,int col) { if(col > 8){col %= 9;row++;} if(row > 8)return true; if(board[row][col] == '.'){ for(int i=1;i<10;++i){ if(safe(board,row,col,i)){ board[row][col]=i+'0'; if(Is_true(board,row,col+1))return true;//要记住找所有解和找一个解的区别!!!否则会回溯回去导致前面找到的解又不见了 board[row][col]='.'; } } } else{ if(Is_true(board,row,col+1))return true; } return false; } void solveSudoku(vector >& board) { Is_true(board,0,0); }};
转载地址:http://ciqxi.baihongyu.com/