leetcode 79 单词排序
和以前做的岛的题类似,但还是折腾了一会,关键问题,第一个,使用一个标志数组来实现是否经过的标志,第二个,将某点置为1之后,完成周边节点的搜索之后,将该节点变为0,很巧妙,贴代码
1 class Solution { 2 public: 3 bool exist(vector<vector<char>>& board, string word) 4 { 5 int m = board.size(); 6 int n = board[0].size(); 7 for(int i = 0 ; i < m ; i++) 8 { 9 for(int j = 0 ; j < n ; j++) 10 { 11 if(board[i][j] == word[0]) 12 { 13 vector<vector<int>> visited(m,vector(n,0)); 14 if(dfs(board,visited,i,j,0,word)) 15 return true; 16 } 17 } 18 } 19 return false; 20 } 21 bool dfs(vector<vector<char>>& board,vector<vector<int>>& visited,int i,int j,int num,string word) 22 { 23 int m = board.size(); 24 int n = board[0].size(); 25 if(board[i][j] != word[num]) 26 return false; 27 else if(num == word.length()-1) 28 return true; 29 else 30 { 31 visited[i][j] = 1; 32 bool if_search = false; 33 if(i+1<m && visited[i+1][j] != 1) 34 if_search = if_search || dfs(board,visited,i+1,j,num+1,word); 35 if(i-1>=0 && visited[i-1][j] !=1) 36 if_search = if_search || dfs(board,visited,i-1,j,num+1,word); 37 if(j+1<n && visited[i][j+1] != 1) 38 if_search = if_search || dfs(board,visited,i,j+1,num+1,word); 39 if(j-1>=0 && visited[i][j-1] != 1) 40 if_search = if_search || dfs(board,visited,i,j-1,num+1,word); 41 visited[i][j] = 0; 42 return if_search; 43 } 44 } 45 };
对于方向的处理可以使用vector<pair<int,int>>来实现,通过循环实现所有方向遍历,出现特殊情况也可以跳出循环。

浙公网安备 33010602011771号