leetcode 79 單詞排序
阿新 • • 發佈:2021-08-24
和以前做的島的題類似,但還是折騰了一會,關鍵問題,第一個,使用一個標誌陣列來實現是否經過的標誌,第二個,將某點置為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 returntrue; 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 intn = 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>>來實現,通過迴圈實現所有方向遍歷,出現特殊情況也可以跳出迴圈。