79. 单词搜索
1 class Solution 2 { 3 public: 4 int dir[4][4]={{-1,0},{1,0},{0,-1},{0,1}}; 5 6 bool exist(vector<vector<char>>& board, string word) 7 { 8 int m=board.size();//几行 9 int n=board[0].size();//几列 10 vector<vector<bool>> visited(m,vector<bool>(n));//是否被访问过 11 for(int i=0;i<m;i++) 12 { 13 for(int j=0;j<n;j++) 14 { 15 if(dfs(i,j,0,board,word,visited)) return true; 16 } 17 } 18 return false; 19 } 20 21 bool dfs(int x,int y,int index,vector<vector<char>>& board,string &word,vector<vector<bool>>& visited) 22 { 23 //如果到达最后一个位置,看是否相等 24 if(index == word.size() - 1) return board[x][y] == word[index]; 25 26 if(word[index]==board[x][y])//如果与当前值相等 27 { 28 visited[x][y]=true;//首先标记为true 29 for(int i=0;i<4;i++)//在四个方向上进行 30 { 31 int new_x=x+dir[i][0]; 32 int new_y=y+dir[i][1]; 33 34 //如果new_x与new_y在范围内,并且标记为false,继续递归 35 if(new_x >= 0 && new_x < board.size() && new_y >= 0 && new_y < board[0].size() && !visited[new_x][new_y]) 36 { 37 if(dfs(new_x,new_y,index+1,board,word,visited)) return true; 38 } 39 } 40 visited[x][y]=false;//复位 41 } 42 43 return false; 44 } 45 };
1 class Solution 2 { 3 public: 4 bool dfs(vector<vector<char>>& board, int i, int j, int l, string word) 5 { 6 if (l == word.size()) return true; 7 if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size() || board[i][j] != word[l]) return false; 8 9 char tmp = board[i][j]; 10 board[i][j] = '0'; 11 12 if(dfs(board, i - 1, j, l + 1, word) || dfs(board, i, j + 1, l + 1, word) 13 || dfs(board, i + 1, j, l + 1, word) || dfs(board, i, j - 1, l + 1, word)) return true; 14 15 board[i][j] = tmp; 16 return false; 17 } 18 bool exist(vector<vector<char>>& board, string word) 19 { 20 //从起始位置开始dfs 21 char c = word[0]; 22 for (int i = 0; i < board.size(); i++) 23 { 24 for (int j = 0; j < board[0].size(); j++) 25 { 26 if (board[i][j] == c) 27 { 28 if (dfs(board, i, j, 0, word)) return true; 29 } 30 31 } 32 } 33 return false; 34 } 35 };
Mamba never out

浙公网安备 33010602011771号