51N皇后
class Solution {
public:
bool r[10], c[10], dg[20], udg[20];
vector<vector<string>>result;
vector<vector<string>> solveNQueens(int n)
{
string s=string(n, '.');
vector<string> chessboard(n, s);
bt(n,0,chessboard);
return result;
}
void bt(int n,int row,vector<string> &chessboard)
{
if(row==n){result.push_back(chessboard);return;}
for(int col=0;col<n;col++)
{
if(!r[row] && !c[col] && !dg[row+col] && !udg[col-row + n])
{
r[row] = c[col] = dg[row + col] = udg[col-row + n] = true;
chessboard[row][col] = 'Q';
bt(n, row + 1, chessboard);
chessboard[row][col] = '.';
r[row] = c[col] = dg[row + col] = udg[col-row + n] = false;
}
}
}
};
37解数独
class Solution {
public:
void solveSudoku(vector<vector<char>>& board)
{
dfs(board,0,0);
}
bool dfs(vector<vector<char>>& board,int i,int j)
{
int m = 9, n = 9;
if(j==n) return dfs(board,i+1,0);
if(i==m) return true;
if(board[i][j]!='.') return dfs(board,i,j+1);
for(char c='1';c<='9';c++)
{
if(!isvalid(board,i,j,c))continue;
board[i][j]=c;
if (dfs(board, i, j + 1)) return true;
board[i][j]='.';
}
return false;
}
bool isvalid(vector<vector<char>>& board, int row, int col, char val)
{
for (int i = 0; i < 9; i++)
{
if (board[row][i] == val) return false;
if (board[i][col] == val) return false;
}
int startRow = (row / 3) * 3;
int startCol = (col / 3) * 3;
for (int i = startRow; i < startRow + 3; i++)
{
for (int j = startCol; j < startCol + 3; j++) {
if (board[i][j] == val ) {
return false;
}
}
}
return true;
}
};