1. 程式人生 > 其它 >leetcode 79 單詞排序

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>>來實現,通過迴圈實現所有方向遍歷,出現特殊情況也可以跳出迴圈。