79. 单词搜索
给定一个 m x n
二维字符网格 board
和一个字符串单词 word
。如果 word
存在于网格中,返回 true
;否则,返回 false
。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED" 输出:true
示例 2:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE" 输出:true
示例 3:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB" 输出:false
提示:
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board
和word
仅由大小写英文字母组成
class Solution { public: int dir[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; int vis[15][15]; int n, m; bool dfs(vector<vector<char> >& board, string word, int x, int y, int k) { if(k == word.length()) return true; for(int i = 0; i < 4; i++) { int tx = x + dir[i][0]; int ty = y + dir[i][1]; if(tx < 0 || ty < 0 || tx >=n || ty >= m || vis[tx][ty]) continue; if(board[tx][ty] == word[k]) { vis[tx][ty] = 1; if(dfs(board, word, tx, ty, k + 1)) return true; vis[tx][ty] = 0; } } return false; } bool exist(vector<vector<char>>& board, string word) { memset(vis, 0, sizeof(vis)); n = board.size(); m = board[0].size(); for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { vis[i][j] = 1; if(board[i][j] == word[0] && dfs(board, word, i, j, 1)) return true; vis[i][j] = 0; } } return false; } };
标签:word,tx,ty,int,单词,vis,搜索,board,79 From: https://www.cnblogs.com/WTSRUVF/p/16617972.html