注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
本帖最后由 matrixmaster 于 2015-7-19 03:56 编辑
请问下,这道题为什么用递归会Run time error呢?代码:- void dfs(vector<string>& board, int m, int n, int i, int j, vector<vector<bool> >& visited) {
- if (i < 0 || i >= m || j < 0 || j >= n || board[i][j] != 'O' || visited[i][j] == true) return;
- visited[i][j] = true;
- dfs(board, m, n, i - 1, j, visited);
- dfs(board, m, n, i, j - 1, visited);
- dfs(board, m, n, i + 1, j, visited);
- dfs(board, m, n, i, j + 1, visited);
- }
- bool validSide(vector<string>& board, int i, int j, vector<vector<bool> >& visited) {
- if (board[i][j] != 'O' || visited[i][j] == false) return true;
- return false;
- }
- void solve(vector<string>& board) {
- if (board.empty()) return;
- int m = board.size();
- int n = board[0].size();
- if (m < 3 || n < 3) return;
- vector<vector<bool> > visited(m, vector<bool>(n, false));
- // top boundary: dfs
- for (int j = 0; j < n; ++j) {
- if (board[0][j] == 'O' && visited[0][j] == false)
- dfs(board, m, n, 0, j, visited);
- }
- // right boundary: dfs
- for (int i = 1; i < m; ++i) {
- if (board[i][n - 1] == 'O' && visited[i][n - 1] == false)
- dfs(board, m, n, i, n - 1, visited);
- }
- // bottom boundary: dfs
- for (int j = n - 2; j >= 0; --j) {
- if (board[m - 1][j] == 'O' && visited[m - 1][j] == false)
- dfs(board, m, n, m - 1, j, visited);
- }
- // left boundary: dfs
- for (int i = m - 2; i > 0; --i) {
- if (board[i][0] == 'O' && visited[i][0] == false)
- dfs(board, m, n, i, 0, visited);
- }
- // matrix inner part
- for (int i = 1; i < m - 1; ++i) {
- for (int j = 1; j < n - 1; ++j) {
- if ( board[i][j] == 'O' && visited[i][j] == false &&
- validSide(board, i - 1, j, visited) && validSide(board, i, j - 1, visited) &&
- validSide(board, i + 1, j, visited) && validSide(board, i, j + 1, visited) )
- board[i][j] = 'X';
- }
- }
- }
复制代码 谢谢。
|