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

网站建设图文长沙县住房和城乡建设局网站

网站建设图文,长沙县住房和城乡建设局网站,北京市建设工程安全质量监督总站网站,wordpress 焦点图算法相关知识点可以通过点击以下链接进行学习一起加油!在图论中,最短路径问题是一个常见的挑战,广泛应用于路由、网络和交通等领域。对于无权图,广度优先搜索(BFS)提供了一种高效且简洁的解法。本文将简要介…

在这里插入图片描述

算法相关知识点可以通过点击以下链接进行学习一起加油!

在图论中,最短路径问题是一个常见的挑战,广泛应用于路由、网络和交通等领域。对于无权图,广度优先搜索(BFS)提供了一种高效且简洁的解法。本文将简要介绍BFS算法的原理,并探讨其在解决最短路径问题中的应用。

请添加图片描述

Alt

🌈个人主页:是店小二呀
🌈C/C++专栏:C语言\ C++
🌈初/高阶数据结构专栏: 初阶数据结构\ 高阶数据结构
🌈Linux专栏: Linux
🌈算法专栏:算法
🌈Mysql专栏:Mysql

🌈你可知:无人扶我青云志 我自踏雪至山巅 请添加图片描述

文章目录

  • 前言
    • 1926. 迷宫中离入口最近的出口
    • 433. 最小基因变化
    • 127. 单词接龙
    • 675. 为高尔夫比赛砍树

前言

本专题主要使用 BFS 来解决最短路径问题,特别是边权为 1 的最短路径问题。

对于此类问题,解决方法是从起点开始,使用 BFS 进行搜索。由于每次扩展都是按层进行的,最短路径的长度即为 BFS 扩展的层数。通过使用队列 [sz, q] 来实现 BFS 扩展,sz 用来记录当前层的节点数,q 则是队列,存储待扩展的节点。每扩展一层,路径长度就增加 1,直到找到目标节点或遍历完所有可达节点。

简而言之,BFS 的层次遍历方式保证了每次访问的节点都按最短路径顺序,因此能够高效地求解边权为 1 的最短路径问题。

在这里插入图片描述


1926. 迷宫中离入口最近的出口

题目】:1926. 迷宫中离入口最近的出口

在这里插入图片描述

算法思路

在这里插入图片描述

这类问题的解决思路与 “BFS 解决 Flood Fill 算法” 的思路非常相似。两者的核心思想都是通过 BFS 遍历图或者矩阵,但在最短路径问题中,我们需要在扩展的过程中记录层数,也就是每次扩展的次数,这样可以得到最短路径。

代码实现

class Solution {
public:int dx[4] = {1, -1, 0, 0};int dy[4] = {0, 0, 1, -1};bool vis[101][101];int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {int m = maze.size(), n = maze[0].size();queue<pair<int,int>> q;q.push({entrance[0],entrance[1]});vis[entrance[0]][entrance[1]] = true;int level = 1;while(!q.empty()){int sz = q.size();for(int i = 0; i < sz; i++){auto [a, b] = q.front();q.pop();for(int k = 0; k < 4; k++){int x = a + dx[k], y = b + dy[k];if(x >= 0 && x < m && y >= 0 && y < n && maze[x][y] == '.' && !vis[x][y]){if(x == 0 || x == m - 1 || y == 0 || y == n - 1) return level;q.push({x,y});vis[x][y] = true;}}}level++;}return -1;}
};

433. 最小基因变化

题目】:433. 最小基因变化

在这里插入图片描述

算法思路
在这里插入图片描述

代码实现

class Solution {
public:int minMutation(string startGene, string endGene, vector<string>& bank) {unordered_set<string> vis;//标识是否出现过unordered_set<string> hash(bank.begin(), bank.end());//标识库string change = "ACGT";//处理边界情况if(startGene == endGene) return 0;if(!hash.count(endGene)) return -1;//BFSqueue<string> q;q.push(startGene);vis.insert(startGene);int ret = 0;while(q.size()){int sz= q.size();ret++;while(sz--){string t = q.front();q.pop();for(int  i = 0; i < 8; i++){string tmp = t;for(int j = 0; j < 4; j++){tmp[i] = change[j];if(hash.count(tmp) && !vis.count(tmp)){if(tmp == endGene) return ret;q.push(tmp);vis.insert(tmp);}}}}}return -1;}
};

127. 单词接龙

题目】:127. 单词接龙

在这里插入图片描述

算法思路

在这里插入图片描述

解法同"433. 最小基因变化"是一致的,不过本道题需要求"单词数量"所以ret初始化为1。

代码实现

class Solution {
public:int ladderLength(string beginWord, string endWord, vector<string>& wordList) {unordered_set<string> vis(wordList.begin(), wordList.end());unordered_set<string> hash;if(beginWord == endWord) return 0;if(!vis.count(endWord)) return 0;queue<string> q;q.push(beginWord);hash.insert(beginWord);int n = beginWord.size();int ret = 1;while(q.size()){int sz = q.size();ret++;while(sz--){string t= q.front();q.pop();for(int i = 0; i < n; i++){string tmp = t;for(char ch = 'a'; ch <= 'z'; ch++){tmp[i] = ch;if(vis.count(tmp) && !hash.count(tmp)){if(tmp == endWord) return ret;q.push(tmp);hash.insert(tmp);}}}}}return 0;}
};

675. 为高尔夫比赛砍树

题目】:675. 为高尔夫比赛砍树

在这里插入图片描述

算法思路

在这里插入图片描述

通过题目分析,可以将问题转化为若干个迷宫问题。我们只需记录每次的起点和终点,并统计步数。同时,为了满足树的高度限制,可以使用数组存储树的坐标(按照顺序排序)。之后,通过不断进行BFS来求解。

通过 for(auto& [a, b] : trees) 可以依次取出需要砍树的坐标和新的起点进行BFS。在BFS过程中,记得更新 vis 数组,避免上一轮的数据影响到当前轮次的结果。

代码实现

class Solution {
public:int m, n;int cutOffTree(vector<vector<int>>& forest) {m = forest.size(), n = forest[0].size();//1.获得砍树的顺序vector<pair<int, int>> trees;for(int i = 0; i < m; i++)for(int j = 0; j < n; j++)if(forest[i][j] > 1)trees.push_back({i,j});//2.获得砍树顺序sort(trees.begin(), trees.end(),[&](const pair<int, int>& p1, const pair<int, int>& p2){return forest[p1.first][p1.second] < forest[p2.first][p2.second];});//3.开始砍树int bx = 0, by = 0;int ret = 0;for(auto& [a, b] : trees){int step = bfs(forest,bx, by, a, b);if(step == -1) return -1;ret += step;bx = a, by = b; }return ret;}int dx[4] = {1, -1, 0, 0};int dy[4] = {0, 0, 1, -1};bool vis[51][51];int bfs(vector<vector<int>>& forest, int bx, int by, int ex, int ey){if(bx == ex && by == ey) return 0;queue<pair<int,int>> q;q.push({bx, by});memset(vis, 0, sizeof vis);vis[bx][by] = true;int step = 0;while(q.size()){step++;int sz =q.size();while(sz--){auto[a, b] = q.front();q.pop();for(int k = 0; k < 4; k++){int x = a + dx[k], y = b + dy[k];if(x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && forest[x][y] != 0){if(x == ex && y == ey) return step;q.push({x, y});vis[x][y] = true;}}}}return -1;}
};

在这里插入图片描述
快和小二一起踏上精彩的算法之旅!关注我,我们将一起破解算法奥秘,探索更多实用且有趣的知识,开启属于你的编程冒险!

http://www.dtcms.com/wzjs/537837.html

相关文章:

  • 企业建网站程序域名备案网站负责人
  • 厦门网站建设设计公司哪家好网页设计作业代做
  • 专业建站网网站运营推广南昌地宝网首页
  • 有什么网站可以免费看电影新建的网站多长时间在百度搜到
  • 福建建设厅网站天下网商自助建站系统
  • 中国新农村建设网站网站结构有哪几种
  • 石家庄城乡建设厅网站学校网站建设注意点
  • 安徽网站建设服务平台建筑工程网下载
  • 网站下载视频的方法免费域名网站创建
  • 做网站要用多少钱怎么看一个网站哪公司做的
  • 惠州做棋牌网站建设哪家服务好帝国做的电影网站
  • 杭州酒店网站建设电子网站建设ppt模板
  • 网站备案号图标代码实现wordpress百度地图
  • 京津冀协同发展英文网站建设与网站优化
  • 诚信企业品牌网站建设郑州做花店网站
  • 简单干净的网站苏州企业网站建设设计制作公司
  • 石家庄专业网站设计wordpress always
  • 个人响应式网站建设wordpress唱片公司模板
  • 上海做网站较好的公司西安企业网站建设托管
  • 自己找网站开发项目app开发和维护费用
  • vs做网站应该新建什么韶关做网站的
  • 兼职网网站建设方案建议书重庆seo网络优化师
  • 门户网站建设 考核烟台网站制作人才招聘
  • 项目管理软件worktile烟台网站快速优化排名
  • 可以免费建设网站产品推广怎么写
  • 网站系统怎么做的物流网站给做软件
  • 手机端微网站设计模板如何注销网站备案
  • 一键搭建网站工具微信手机网站设计6
  • 汽车网站建设多少钱贵州省建设学校网站首页
  • 做淘宝客导购网站推广苏州制作网页方案