void solve(vector<vector<char>> &board) { // Start typing your C/C++ solution below // DO NOT write int main() function if(board.empty()) return; int m = board.size(); int n = board[0].size(); set<Pair> hash; for(int i = 0; i < n; i++) { traverseDFS(board,0,i,m,n,hash); traverseDFS(board,m-1,i,m,n,hash); } for(int i = 1; i < m-1; i++) { traverseDFS(board,i,0,m,n,hash); traverseDFS(board,i,n-1,m,n,hash); } for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) { if(board[i][j] == 'O') board[i][j] = 'X'; if(board[i][j] == 'D') board[i][j] = 'O'; } }
int searchController(Graph graph, int start, int stop, int option) { Dllist close; Dllist node; close = new_dllist(); switch(option) { case BFS_SEARCH: breathFirstSearch(graph, start, stop, close); break; case BFS_TRAVERSE: traverseBFS(graph, start, close); break; case DFS_SEARCH: deepFirstSearch(graph, start, stop, close); break; case DFS_TRAVERSE: traverseDFS(graph, start, close); break; default: printf("This is not an option\n"); free_dllist(close); return; } node = dll_first(close); printf("Visit %d\n", jval_i(node->val)); free_dllist(close); }
void traverseDFS(vector<vector<char> >& board, int row, int col, int m, int n, set<Pair>& hash) { if(row >= 0 && row < m && col >= 0 && col < n) { if(hash.count(Pair(row,col))) return; hash.insert(make_pair(row,col)); if(board[row][col] == 'O') { board[row][col] = 'D'; traverseDFS(board,row+1,col,m,n,hash); traverseDFS(board,row,col+1,m,n,hash); traverseDFS(board,row-1,col,m,n,hash); traverseDFS(board,row,col-1,m,n,hash); } } }