搜索与图论
文章平均质量分 56
基础算法中的搜索与图论部分的算法原理及简单例题
CSDN729180099
这个作者很懒,什么都没留下…
展开
-
搜索与图论——求一个图的直径
一、思路从任意一点出发,找到离该点距离最大的点,即为直径的一个端点。然后再从这个点出发,找到离这个点距离最大的点。这两个点的距离即为直径。二、例题:大臣的旅费很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。原创 2021-02-15 15:40:44 · 2325 阅读 · 0 评论 -
搜索与图论——二分图
1. 二分图的定义一个图中的顶点可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。2. 二分图的判定一个不含环的图一定是二分图,如果有环则不存在奇数环的图一定是二分图3. 判断二分图的两种算法4. 染色法算法思路:利用二分图的定义,把每个连通图中的每个相邻的点染成不同的颜色,如果每个相邻的点都满足颜色不同则是二分图,如果出现矛盾则不是二分图例题:染色法判定二分图给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图原创 2020-10-21 22:57:32 · 302 阅读 · 0 评论 -
搜索与图论——最小生成树
1. 最小生成树定义给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。2. 最小生成树的应用例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低。这就需要找到带权的最小生成树。3. 最原创 2020-10-19 22:16:57 · 387 阅读 · 0 评论 -
搜索与图论——最短路——Floyd算法
1. Floyd算法**算法思路:**利用三重循环枚举所有情况,求出最小值的邻接矩阵例题: Floyd求最短路给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。数据保证图中不存在负权回路。输入格式第一行包含三个整数n,m,k接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。接下来k行,每行包含两个整数x,y,表示询原创 2020-10-18 20:37:26 · 114 阅读 · 0 评论 -
搜索与图论——最短路——Bellman_Ford与SPFA
Bellam_Ford算法**算法思想:**利用双重循环迭代更新每条边,最终求出到起始点的距离。外层循环控制从起点到终点需要更新的边的数量,内层循环更新每一条边。例题:有边数限制的最短路给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x.原创 2020-10-15 22:03:41 · 135 阅读 · 0 评论 -
搜索与图论——最短路——朴素与堆优化的Dijkstra
1. 最短路算法体系2. 朴素的Djikstra例题:Dijkstra求最短路 I给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n≤500,1≤m≤105,图中涉及边长均不超过10原创 2020-10-05 22:40:09 · 242 阅读 · 1 评论 -
搜索与图论——树与图的遍历:拓扑排序
1.树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b(2) 邻接表:// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx;// 添加一条边a->bvoid add(int a, int b){ e[idx] = b, ne[idx原创 2020-08-26 20:43:35 · 598 阅读 · 0 评论 -
搜索与图论——DFS与BFS
名称数据结构空间特点DFS深度优先搜索staekO(h)不具有最短路BFS宽度优先搜索queueO(2h)最短路2. DFS搜索顺序深度优先搜索,每次总是搜索到一条路径上的最终子节点,然后开始回溯,搜索下一个分支节点。下图以三层树为例:3. 例题1:全排列问题给定一个从1开始长度为 n 的不包含重复数字的序列,请你求出其所有不重复的全排列。输入格式第一行包含整数 n。输出格式输出所有的不同排列,每种排列占一行。在确定每种排列的输出顺序时,...原创 2020-08-25 21:12:43 · 250 阅读 · 0 评论