79. Word Search

来源:互联网 发布:中国为什么网络扫黄 编辑:程序博客网 时间:2024/06/06 18:21

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.


class Solution {
public:
    bool dfs(vector<vector<char>>&board, string word, int pos, int row, int col, vector<vector<int>>&visited)
    {
        if(pos==word.size()-1) return true;
        visited[row][col]=1; //访问过
        if(row+1<board.size() && visited[row+1][col]==0 && board[row+1][col]==word[pos+1])
            if(dfs(board,word,pos+1,row+1,col,visited))
                return true;

        if(row-1>=0 && visited[row-1][col]==0 && board[row-1][col]==word[pos+1])
            if(dfs(board,word,pos+1,row-1,col,visited))
                return true;

        if(col+1<board[0].size() && visited[row][col+1]==0 && board[row][col+1]==word[pos+1])
            if(dfs(board,word,pos+1,row,col+1,visited))
                return true;

        if(col-1>=0 && visited[row][col-1]==0 && board[row][col-1]==word[pos+1])
            if(dfs(board,word,pos+1,row,col-1,visited))
                return true;

        visited[row][col]=0;
        return false;

    }
    
    
    bool exist(vector<vector<char>>& board, string word) {
        if(word.size()==0)
            return true;
        if(board.size()==0 && word.size()!=0)
            return false;
        int row=board.size();
        int col=board[0].size();
        vector<vector<int>>visited(row,vector<int>(col));
        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;
    }

    

};


原创粉丝点击