• 79. 单词搜索


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

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

    示例:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/word-search

    永远都忘不了这么蠢的错误

    class Solution {
    public:
        int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}},flag=0;
        void dfs(int x,int y,int pos,vector<vector<char>>& board,string& word,vector<vector<bool>>& visited)
        {
            if(flag)
                return;
            if(pos==word.size())
            {
                flag=1;
                return;
            }
            if(x<0 || x>=board.size() || y<0 || y>=board[0].size())
                return;
            if(word[pos]==board[x][y] && visited[x][y]==false)
            {
                visited[x][y]=true;   
                for(int i=0;i<4;i++)
                {
                    dfs(x+dir[i][0],y+dir[i][1],pos+1,board,word,visited);
                }
                visited[x][y]=false;
            } 
        }
        bool exist(vector<vector<char>>& board, string word) {
            vector<vector<bool>> visited(board.size(),vector<bool>(board[0].size(),false));
            for(int i=0;i<board.size();i++)
            {
                for(int j=0;j<board[0].size();j++)
                {
                    //       太蠢了,居然把数组写在这里 vector<vector<bool>> visited(board.size(),vector<bool>(board[0].size(),false));
                    dfs(i,j,0,board,word,visited);
                    if(flag)
                        return true;    
                }
            }
            return false;
        }
    };
  • 相关阅读:
    汉语-词语-平目:百科
    汉语-词语-平昔:百科
    汉语-词语-平一:百科
    汉语-词语-平居:百科
    汉语-词语-平展:百科
    汉语-词语-平静:百科
    汉语-词语-平心:百科
    汉语-词语-平庸:百科
    汉语-词语-平常:百科
    1231 最优布线问题
  • 原文地址:https://www.cnblogs.com/dealer/p/12499372.html
Copyright © 2020-2023  润新知