[leetcode]Word Search

来源:互联网 发布:mac 打开android sdk 编辑:程序博客网 时间:2024/06/04 17:43

Word Search

 

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[  ["ABCE"],  ["SFCS"],  ["ADEE"]]
word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.
解题思路:深度优先遍历运用,从每个点开始进行深度优先遍历,右上左下四个方向查找,如果找到讲访问过的元素进行标记,
找不到将元素访问标记置为未曾访问状态。
void dfs(vector<vector<char> > &board, int row, int column, vector<vector<bool> > &visited, string &str, int si, bool &flg){if(si == str.size()){flg = true;return;}if(!flg){if(row >= board.size() || row < 0 || column >= board[0].size() || column < 0){return;}if(str[si] == board[row][column] && !visited[row][column]){visited[row][column] = true;if(!flg) dfs(board, row, column + 1, visited, str, si + 1, flg); //向右if(!flg) dfs(board, row + 1, column, visited, str, si + 1, flg); //向下if(!flg) dfs(board, row, column - 1, visited, str, si + 1, flg); //向左if(!flg) dfs(board, row - 1, column, visited, str, si + 1, flg); //向上if(!flg) visited[row][column] = false;}}}//word searchbool exist(vector<vector<char> > &board, string word) {int m = board.size();if(0 == m) return false;int n = board[0].size();vvb(m, vector<bool>(n, false));bool flg = false;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){dfs(board, i, j, vvb, word, 0, flg);if(flg) break;}if(flg) break;}return flg; }




0 0
原创粉丝点击