当前位置: 首页 > news >正文

【Hot 100 刷题计划】 LeetCode 79. 单词搜索 | C++ 标准方向数组 DFS 与回溯

LeetCode 79. 单词搜索

📌 题目描述

题目级别:中等

给定一个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

💡 破题思路:网格 DFS 深度优先搜索

这道题是经典的“迷宫寻宝”模型,我们采用DFS(深度优先搜索)+ 回溯的算法框架。

核心逻辑拆解:

  1. 寻找起点:我们需要两层for循环遍历整个二维网格,只要遇到和目标单词首字母相同的字符,就把它作为起点启动 DFS。
  2. 方向控制:使用经典的算法竞赛套路——方向数组dx[4]dy[4]。通过一个简单的for (int i = 0; i < 4; i++)循环,就能优雅地向上下左右四个方向进行位置的偏移试探。
  3. 状态标记与回溯
    • 题目要求“同一个单元格内的字母不允许被重复使用”,因此我们需要一个状态数组st来记录哪些格子当前正在路径中。
    • 向下探索前,标记st[x][y] = 1
    • 如果后续这条路走不通(碰壁),退回来时,必须把状态重置为st[x][y] = 0,以便其他路径重新经过这里。这就叫回溯

💻 C++ 代码实现 (保留原汁原味作者版)

classSolution{public:intdx[4]={0,-1,0,1};intdy[4]={-1,0,1,0};intres=0,m,n;intst[20][20];// 状态数组,记录格子是否已被访问boolexist(vector<vector<char>>&board,string word){m=board.size(),n=board[0].size();for(inti=0;i<m;i++)for(intj=0;j<n;j++){// 找到与单词首字母匹配的起点if(board[i][j]==word[0]){// 每次开启全新的寻找前,清空访问状态memset(st,0,sizeofst);dfs(board,word,1,i,j);}}returnres;}voiddfs(vector<vector<char>>&board,string word,intpos,intx,inty){// 递归终止条件:成功拼出了目标单词if(pos==word.size()){res=1;return;}// 向四个方向试探for(inti=0;i<4;i++){intxx=x+dx[i],yy=y+dy[i];// 越界检查 && 访问状态检查 && 字符匹配检查if(xx>=0&&xx<m&&yy>=0&&yy<n&&!st[xx][yy]&&board[xx][yy]==word[pos]){st[x][y]=1;// 标记当前起点为已访问dfs(board,word,pos+1,xx,yy);// 向下一层深入探索st[x][y]=0;// 回溯:撤销标记,尝试其他分支}}}};
http://www.cnnetsun.cn/news/1864044.html

相关文章:

  • 终极Buttercup Desktop自动化与脚本指南:10个实用技巧提升密码管理效率
  • ESPAsyncWebServer异步Web服务原理与嵌入式实战
  • NSudo权限管理工具技术深度解析:原理、应用与最佳实践
  • 别再只让大模型聊天了!用SWIFT+Qwen2.5微调,5分钟搞定一个句子相似度打分模型
  • Sambert中文语音合成实战:一键部署,轻松生成带情感的AI语音
  • 红黑树:一种高效的自平衡二叉查找树
  • Amazon DSSTNE深度解析:革命性稀疏张量网络引擎入门指南
  • 快速掌握d3-cloud:5分钟创建专业级JavaScript词云可视化
  • 从2G到3.2GHz:一个宽带连续F类PA的ADS设计复盘与效率优化心得
  • 5大核心能力构建高效QQ机器人:go-cqhttp完整实战指南
  • Windows APK文件管理终极方案:ApkShellExt2让资源管理器更智能
  • VS Code 用了 5 年,这 15 个功能我才发现——老程序员的自我检讨报告
  • 如何在2026年用BiliTools哔哩哔哩工具箱实现跨平台视频下载终极指南
  • 一款基于 .NET 开源、跨平台应用程序自动升级组件坦
  • 收藏!小白程序员必看:Agent框架如何让AI Agent真正“活”起来?
  • OFA模型与Dify平台集成:可视化构建图像描述AI工作流
  • BiliTools跨平台工具箱:高效管理B站资源的专业解决方案
  • 技术深度解析:ImStudio GUI布局设计器与实时预览引擎
  • CVAT平台部署与半自动标注实战:从零到一搭建高效标注环境
  • 巴瑞替尼Baricitinib 2mg或4mg治重度斑秃,近四成患者头发基本长回
  • vLLM 0.6.4 + Qwen-14B模型部署:从单卡到H100双卡并行,我的完整配置与避坑实录
  • 利用域代码实现Word中Mathtype公式的智能编号与精准交叉引用
  • 3步解决Mac NTFS写入难题:Nigate免费工具全面指南
  • 【nginx】从零开始:将WebSocket(WS)升级为安全WebSocket(WSS)的完整指南
  • 球谐函数在实时渲染中的妙用:从理论到游戏光照实践
  • 攻克Earthworm用户头像上传:从0到1的全栈实现指南
  • opencv人流量统计
  • FanControl零基础配置指南:5步打造智能静音散热系统
  • 终极指南:AppleRa1n免费解锁iOS 15-16设备激活锁的完整教程
  • 【AIAgent协作黄金法则】:SITS2026首席专家亲授3大人类-AI协同失效场景与7步落地框架