suduko及8皇后问题及相关问题的解题思路
2014-02-16 14:26
211 查看
1.经典的N皇后问题
就是个经典的DFS算法
我摆到第一行第一列了哦,然后就开始Deep看下一行,可以放哪,然后递推,直到棋盘的行列到。
其中判断suduko的解法中,稍微不同的一点在于
而sudoku
判断合法的是
就是个经典的DFS算法
我摆到第一行第一列了哦,然后就开始Deep看下一行,可以放哪,然后递推,直到棋盘的行列到。
void NQueenHelper(vector<vector<string>> & board, vector<vector<string>>& result, int row) { int N = board.size(); if (row == N)//reached end scenario { string str; vector<string> final; for (int i = 0; i<N; i++) { for (int j = 0; j<N; j++) { str.push_back(board[i][j][0]); } final.push_back(str); str.clear(); } result.push_back(final); } for (int col = 0; col < N; col++) { if (isValidMove(board, row, col)) { board[row][col] = "Q"; NQueenHelper(board, result, row + 1); board[row][col] = "."; } } }
其中判断suduko的解法中,稍微不同的一点在于
isValidMove 八皇后问题
bool isValidBoard(vector<vector<int>>& board, int col, int row) { int size = board.size(); //look at col for(int i =0; i<col ; i++) if(board[row][i]) return false; //look at row for(int i = 0;i <row; i++ ) if(board[i][col]) return false; //diag for(int i= row, j= col; i>=0&&j>=0; i--,j--) { if(board[i][j]) return false; } for(int i= row, j= col; i>=0&& j<size; i--,j++) { if(board[i][j]) return false; } return true; }
而sudoku
判断合法的是
// 检查往某个位置填入一个数之后整个 board 是否有效(只需要考虑当前行、 // 当前列和所属的田字格) bool isValidBoard(const vector< vector<char> >& board, pair<int, int> pos) { // 检查当前行是否有效 if (!isValid(board[pos.first])) return false; // 检查当前列是否有效 vector<char> column(9); for (int i = 0; i < 9; ++i) column[i] = board[i][pos.second]; if (!isValid(column)) return false; // 检查所在的田字格是否有效 int block_row = pos.first / 3; int block_col = pos.second / 3; vector<char> block; for (int i = block_row * 3; i < block_row * 3 + 3; ++i) for (int j = block_col * 3; j < block_col * 3 + 3; ++j) block.push_back(board[i][j]); if (!isValid(block)) return false; // 如果以上都有效,则返回 true return true; }
相关文章推荐
- 杭电 2553 N皇后问题 递归回溯 打表 附解题思路
- leetCode 52.N-Queens II (n皇后问题II) 解题思路和方法
- leetCode 51.N-Queens (n皇后问题) 解题思路和方法
- Oracle数据库ORA-00257的相关问题及解决问题的思路
- 动态库打包相关问题的解决思路
- NYoj_07_街区最短路径问题 解题思路和代码
- C#的解题思路(1):不重复随机数的产生问题
- leetCode 66.Plus One (+1问题) 解题思路和方法
- C#的解题思路(1):不重复随机数的产生问题
- C#的解题思路(1):不重复随机数的产生问题
- c中常见的矩形问题的解题思路与方法
- C#的解题思路(1):不重复随机数的产生问题
- 杭电 HOJ 2553 N皇后问题 解题报告
- 传教士和野人问题解题思路
- n皇后2种解题思路与代码-Java与C++实现
- n皇后2种解题思路与代码-Java与C++实现
- 【C语言】街区最短路径问题解题思路
- C#的解题思路(1):不重复随机数的产生问题
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
- 浙大PAT 2-09. 装箱问题模拟 (解题思路)