79. Word Search

来源:互联网 发布:神之浩劫数据迁移 编辑:程序博客网 时间:2024/06/13 20:37

79 Word Search
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 =

[
[‘A’,’B’,’C’,’E’],
[‘S’,’F’,’C’,’S’],
[‘A’,’D’,’E’,’E’]
]
word = “ABCCED”, -> returns true,
word = “SEE”, -> returns true,
word = “ABCB”, -> returns false.

思路:肯定是dfs了。但dfs怎么写,我这个地方写的很蠢……看了答案后也把代码贴这里,顺便发发牢骚。

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

1、自己写的代码是管他能不能dfs,先扔进dfs函数中,这么做不太好……
2、还是第一点说的,该不该继续dfs,要先判断后再调用dfs比较好。。。

原创粉丝点击