LeetCode 79. 单词搜索(C++)

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

C++

class Solution {
public:
    bool DFS(vector>& board, string word, int row, int col, int index, vector>& flag)
    {
        if(index==word.length())
        {
            return true;
        }
        if(row<0 || row>=board.size() || col<0 || col>=board[0].size() || board[row][col]!=word[index])
        {
            return false;
        }
        if(0==flag[row][col])
        {
            flag[row][col]=1;       
            if(DFS(board, word, row-1, col, index+1, flag))
            {
                return true;
            }
            if(DFS(board, word, row+1, col, index+1, flag))
            {
                return true;
            }
            if(DFS(board ,word, row, col-1, index+1, flag))
            {
                return true;
            }
            if(DFS(board, word, row, col+1, index+1, flag))
            {
                return true;
            }
            flag[row][col]=0;                         
        }
        return false;
    }    
    bool exist(vector>& board, string word) 
    {
        int m=board.size();
        int n=board[0].size();
        int k=word.length();
        vector> flag(m,vector(n,0));
        for(int i=0;i

 

你可能感兴趣的:(LeetCode)