Word Search

简介:
-----QUESTION-----

Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

 [ ["ABCE"], ["SFCS"], ["ADEE"] ]
word  =  "ABCCED" , -> returns  true ,
word  =  "SEE" , -> returns  true ,
word  =  "ABCB" , -> returns  false .

-----SOLUTION-----

class Solution {
public:
    bool exist(vector<vector<char> > &board, string word) {
        if(board.empty()) return false;
        vector<vector<bool>> visited(board.size(), vector<bool>(board[0].size(), false));
        bool result = false;
        for(int i = 0; i < board.size(); i++)
        {
            for(int j = 0; j < board[0].size(); j++)
            {
                 result = dfs(board,word,i,j,0,visited);
                 if(result) return true;
                 visited[i][j] = false;
            }
        }
        return false;
    }
    bool dfs(vector<vector<char> > &board, string word, int i, int j, int depth, vector<vector<bool>> &visited)
    {
        if(board[i][j] != word[depth]) return false;
        if(depth == word.length()-1) return true;
        visited[i][j] = true;
        if(j < board[0].size()-1 && !visited[i][j+1]){
            if(dfs(board,word, i, j+1, depth+1,visited)) return true;
            else visited[i][j+1] = false;
        }
        if(j > 0 && !visited[i][j-1])
        {
            if(dfs(board,word, i, j-1, depth+1,visited)) return true;
            else visited[i][j-1] = false;
        }
        if(i < board.size()-1 && !visited[i+1][j]) 
        {
            if(dfs(board,word, i+1, j, depth+1,visited)) return true;
            else visited[i+1][j] = false;
        }
        if(i > 0  && !visited[i-1][j]) 
        {
            if(dfs(board, word, i-1, j, depth+1,visited)) return true;
            else visited[i-1][j] = false;
        }
        return false;
    }
};








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5068918.html,如需转载请自行联系原作者


相关文章
|
6月前
|
C# 开发工具 数据安全/隐私保护
C# 实现 Word 加盖骑缝章效果
C# 实现 Word 加盖骑缝章效果
|
21天前
word技巧
【10月更文挑战第24天】word技巧
26 1
|
索引
LeetCode 79. Word Search
给定一个2D板和一个单词,找出该单词是否存在于网格中。 该单词可以由顺序相邻的单元的字母构成,其中“相邻”单元是水平或垂直相邻的单元。 相同的字母单元格不得多次使用。
74 0
LeetCode 79. Word Search
LeetCode 212. Word Search II
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
79 0
LeetCode 212. Word Search II
|
Java
Hello Word你真的理解了么?
Hello Word你真的理解了么?今天教我的表弟,有些感悟
154 0
Hello Word你真的理解了么?
Word Capitalization
Word Capitalization
94 0
Word Capitalization
Word
Word
128 0
Word