首页 > 其他分享 >单词搜索(回溯)

单词搜索(回溯)

时间:2025-01-01 11:08:05浏览次数:1  
标签:word int 单元格 单词 vector 搜索 board 回溯 true

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

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

 

示例 1:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true

示例 2:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true

示例 3:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false

 

class Solution {
public:
    int m,n;
    vector<vector<int>> direction={
        {-1,0},{1,0},{0,-1},{0,1}
    };
    bool dfs(vector<vector<char>>& board,vector<vector<int>>& isVisited,int i,int j,string word,int start){
        if(start==word.size()){// 全部匹配成功
            return true;
        }
        //判断是否越界以及当前字符是否与word中index下的字符相等以及当前字符未被访问
        if(i<0||i>=m||j<0||j>=n||board[i][j]!=word[start]||isVisited[i][j]==1){
            return false;
        }
        isVisited[i][j]=1;//标记该元素已被访问
        for(int k=0;k<4;k++){//遍历四个方向
            int x = i+direction[k][0];
            int y = j+direction[k][1];
            if(dfs(board,isVisited,x,y,word,start+1)){//找到匹配,直接返回true,不用再继续遍历
                return true;
            }
        }
        //当前字符未找到下一个匹配的字符,回溯,标记该元素未被访问
        isVisited[i][j]=0;
        return false;
    }
    bool exist(vector<vector<char>>& board, string word) {
        m = board.size();//行
        n = board[0].size();//列
        vector<vector<int>> isVisited(m,vector<int>(n,0));//初始化访问数组
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                bool res = dfs(board,isVisited,i,j,word,0);
                if(res) return res; //一旦匹配,直接返回true
            }
        }
        return false;
    }
};

 

标签:word,int,单元格,单词,vector,搜索,board,回溯,true
From: https://www.cnblogs.com/yueshengd/p/18645372

相关文章

  • Everything(文件快速搜索工具)v1.4.1.1026
    Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件。如果你用过Windows自Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件。如果你用过Windows自带的搜索工具、TotalCommander的搜索、Google桌面搜索或百度硬盘搜索,都因为速度或其他原因而不满意;或......
  • 【无线充电车辆路线和速度预测】使用随机搜索优化方法同时具有路由和速度分配的模型研
    ......
  • 括号生成(回溯)
    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"] classSolution{public://存储所有可能的有效括号组合的结果......
  • 不用工具直接使用Google谷歌搜索!2024最新可用的16个Google谷歌镜像,谷歌学术镜像站(持
    Google(谷歌)退出中国后,国内一直不能正常使用Google搜索。但是在搜索可靠性与准确度方便,Google是无法绕过的搜索引擎。无论是百度Baidu或者卷土重来的Bing,在实际的搜索场景,其实是无法达到Google谷歌的水准的。另外Google在搜索领域以及公共信息领域持续不断的深耕,已经建立了庞大的......
  • 组合总和(回溯)
    给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一......
  • 电话号码的字母组合(回溯)
    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。 示例1:输入:digits="23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf&qu......
  • 英语背单词 专四词汇 中英对照 2025年01月
    2025-01-02IndexWordPronunciationPartsofSpeechExplanationTranslationinChinese1pierce/pɪrs/verb1.Tomakeaholeoropeninginsomething.2.Tomoveorpassthroughsomethingsharply.刺穿;穿透2demonstrate/ˈdɛmənstreɪt/verb1.Tosh......
  • 背单词 纯英文 2025年01月
    2025-01-312025-01-302025-01-292025-01-282025-01-272025-01-262025-01-252025-01-242025-01-232025-01-222025-01-212025-01-202025-01-192025-01-182025-01-172025-01-162025-01-152025-01-142025-01-132025-01-122025-01-112025-01-102025-01-092025-01-082025-01-072025-......
  • Elasticsearch构建全文搜索系统
    Elasticsearch构建全文搜索系统|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|---------......
  • Elasticsearch:如何在搜索时得到精确的总 hits 数
    Elasticsearch:如何在搜索时得到精确的总hits数|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|--------......