图论专题

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一:卡码网 103. 水流问题 题目链接 题解:DFS 题目二:卡码网 104. 建造最大岛屿 题目链接 题解:DFS  三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节,还是选择使用 DFS 来解决这类搜索问题(单纯因为我更熟悉 DFS 一点),今天补卡的是水流问题和岛屿问题。个人感觉这一章节题对于刚

图论篇--代码随想录算法训练营第五十二天打卡| 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿

101. 孤岛的总面积 题目链接:101. 孤岛的总面积 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。 现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。 解题思路: 从周边找到陆地,然后通过 dfs或者bfs 将

代码随想录 刷题记录-28 图论 (5)最短路径

一、dijkstra(朴素版)精讲 47. 参加科学大会 思路 本题就是求最短路,最短路是图论中的经典问题即:给出一个有向图,一个起点,一个终点,问起点到终点的最短路径。 接下来讲解最短路算法中的 dijkstra 算法。 dijkstra算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。 需要注意两点: dijkstra 算法可以同时求 起点到所有节点的最短路径权值不

图论篇--代码随想录算法训练营第五十一天打卡| 99. 岛屿数量(深搜版),99. 岛屿数量(广搜版),100. 岛屿的最大面积

99. 岛屿数量(深搜版) 题目链接:99. 岛屿数量 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 解题思路: 1、每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 2、遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都

图论篇--代码随想录算法训练营第五十天打卡| 深度优先搜索理论基础,98. 所有可达路径,广度优先搜索理论基础

深度优先搜索理论基础 DFS模板: void dfs(参数) {if (终止条件) {存放结果;return;}for (选择:本节点所连接的其他节点) {处理节点;dfs(图,选择的节点); // 递归回溯,撤销处理结果}} 98. 所有可达路径 题目链接:98. 所有可达路径 题目描述: 给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个函数,找出并返回所

数据结构实验图论:基于邻接矩阵/邻接表的广度优先搜索遍历(BFS)

数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历) 输入 输入第一行为整数n(0< n <100),表示数据的组数。 对于

代码随想录算法训练营第六十二天 | 图论part11

97. 小明逛公园 #include <iostream>#include <vector>#include <climits>#include <fstream>using namespace std;void floyd(vector<vector<vector<int>>>& grid) {int n = grid.size() - 1;for (int k = 1; k <= n;

图论 求有向图的所有强连通分量 kosaraju算法

一、问题 如何找到有向图(a)中的所有强连通分量,如图(b)    二、kosaraju算法 Kosaraju的算法(又称为–Sharir Kosaraju算法)是一个线性时间(linear time)算法找到的有向图的强连通分量。   1. 原理 它利用了一个事实,逆图(与各边方向相同的图形反转, transpose graph)有相同的强连通分量的原始图。   2. 逆图

每日刷题(图论)

P1119 灾后重建 P1119 灾后重建 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 看数据范围知道需要用到Floyd算法,但是道路是不能直接用的,需要等到连接道路的两个村庄重建好才可以使用,所以这需要按照时间依次加入中转点,再更新dis数组。 代码 #include<bits/stdc++.h>#define int long long #d

算法训练营|图论第11天 Floyd算法 A*算法

题目:Floyd算法 题目链接: 97. 小明逛公园 (kamacoder.com) 代码: #include<bits/stdc++.h>using namespace std;struct Edge {int to;int val;Edge(int t, int w) :to(t), val(w) {}};int main() {int n, m;cin >> n >> m;i

算法训练营|图论第10天 Bellman_ford:优化算法,判断负权算法,单源有限最短路

题目:Bellman_ford:优化算法 题目链接: 94. 城市间货物运输 I (kamacoder.com) 代码: #include<bits/stdc++.h>using namespace std;struct Edge {int to;int val;Edge(int t, int w) :to(t), val(w) {}};int main() {int n, m;c

算法训练营|图论第8天 拓扑排序 dijkstra

题目: 拓扑排序 题目链接: 117. 软件构建 (kamacoder.com) 代码: #include<bits/stdc++.h>#include<unordered_map>using namespace std;int main() {int n, m;cin >> n >> m;vector<int>inDegree(n, 0);unordered_map<int, v

[Python图论]在用图nx.shortest_path求解最短路径时,节点之间有多条边edge,会如何处理?

问: 在使用图求最短路径时,如果节点之间有多条路径,shortest_route = nx.shortest_path(G, source=start_node, target=end_node, weight='length')会如何处理,会自动选择最短那条吗? # 输出图G各节点之间有多少条边edge,并给出其长度Edges between 103928 and 25508583:共2条

【图论】最短路

Floyed算法     【思想】Floyed-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来                   得到最佳路径。 注意单 独一条边的路径也不一定是最佳路径。         从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。         对于每一

算法设计与分析:实验五 图论——桥问题

实验内容: 1. 桥的定义 在图论中,一条边被称为“桥”代表这条边一旦被删除,这张图的连通块数量会增加。等价地说,一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥。 2. 求解问题 找出一个无向图中所有的桥。 1.基准算法 (1)算法思路: 遍历每条边:对于图中的每一条边 (u, v),逐条进行处理。移除边 (u, v):暂时从图中移除边 (u, v)。检查连通性:使

DAY53-图论BFS

kama110.字符串接龙 /*** 遍历每个字母和每个位置替换* @param args*/public static void main(String[] args) {//读取Scanner scan = new Scanner(System.in);int n = scan.nextInt();scan.nextLine();String startStr=scan.next(

代码随想录算法训练营第六十天 | 图论part10

94. 城市间货物运输 I 对于Bellman_ford算法的优化,松弛n-1次,并且每一次都松弛每一条边,其实做了许多没有意义的事情。实际上只去松弛上一次计算过的节点作为出发节点的边即可。 #include <iostream>#include <vector>#include <list>#include <queue>#include <fstream>#include <cl

代码随想录算法训练营第五十七天 | 图论part07

53. 寻宝 prim算法 prim算法 #include <iostream>#include <vector>#include <fstream>#include <climits>using namespace std;int main() {int v, e;int v1, v2, val;ifstream infile("input.txt");cin >> v >> e;ve

代码随想录算法训练营第五十八天 | 图论part08

117. 软件构建 在这一题中,只需要输出一种方法。使用BFS的方法,找到入度为0的节点,将其从树中删去,重复上述步骤,直到没有入度为0的节点。如果此时没有删除所有的节点,表明这个有向图有环,输出-1.否则,正常输出。 #include <iostream>#include <vector>#include <unordered_map>#include <queue>#include

打卡第58天------图论

最近图论的没有好好学习,我预备去参加一个专门针对前端的训练营,继续骑马找马。祈祷上帝帮助我实现两份工作的无缝衔接。 一、拓扑排序精讲 拓扑排序看上去很复杂,其实了解其原理之后,代码不难 代码随想录 二、dijkstra(朴素版)精讲 后面几天都是最短路系列了,对于最短路系列,我的建议是,如果第一次接触最短路算法的话,能看懂原理,能照着代码随想录把代码抄下来就可以了,二刷的时候 再尝试

问题最优解:实际问题转换图论问题

文章目录 图论的本质概念理解指标衡量哪些实际问题可以转换成图论问题?案例:城市交通优化 图算法的作用及求解优化概念理解指标衡量案例:网络流量优化 图论的局限性与可能性概念理解指标衡量案例:社交网络中的用户行为分析 图论结构与模型概念理解指标衡量哪些场景问题可以转换成图模型?案例:医疗诊断中的贝叶斯网络 图论与机器学习概念理解指标衡量常见场景案例:社交网络中的用户行为预测 图算法的并行化与分布

一刷代码随想录(图论9)

dijkstra(堆优化版)精讲 题目即小明参会题 解法:若遇到稀疏图可以考虑处理边而非处理节点,使用邻接表来存储边,使用小顶堆对边进行排序,直接取出最小的边即可,然后从当前点出发遍历剩余数组,更新min数组,在将更新后的数组与路径长度加入小顶堆,相当于用一条新边代替了原来的边,并在小顶堆里自动排序得到最短路径 #include <iostream>#include <vector>#i

【图论简介】

图论简介 图论是一门数学分支,主要研究图(Graph)的性质、结构和应用。图论在计算机科学、网络理论、优化问题、生物信息学等多个领域都有广泛的应用。本文将简要介绍图论的基本概念、常见算法及其在实际中的应用。 一、图的基本概念 图(Graph): 图是由一组顶点(Vertices)和连接顶点的边(Edges)组成的结构。可以表示为 (G = (V, E)),其中 (V) 是顶点的集合,(E)

代码随想录算法训练营第五十六天 | 图论part06

108. 冗余连接 #include <iostream>#include <vector>using namespace std;void init(vector<int> &father) {for (int i = 0; i < father.size(); ++i) {father[i] = i;}}int find(vector<int>& father, int u) {if (

代码随想录算法训练营第五十五天 | 图论part05

107. 寻找存在的路径 只需要判断是否联通,不需要知道具体路径或者路径数量,可以使用并查集。 // project1.cpp : This file contains the 'main' function. Program execution begins and ends there.//#include <iostream>#include <vector>using names

代码随想录算法训练营第五十二天 | 图论part03

101. 孤岛的总面积 #include <vector>#include <iostream>using namespace std;int dir[4][2] = {0, 1, 0, -1, -1, 0, 1, 0};void dfs(const vector<vector<int>> &grid, vector<vector<bool>> &visited, int x, int y,