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 };

 

posted @ 2020-03-30 21:37  Jinxiaobo0509  阅读(104)  评论(0)    收藏  举报