![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
Jerry Lee の blog
never never never give up.
展开
-
图的遍历程序模板--DFS
图的遍历程序模板–DFS//图的遍历:DFS 和 BFS//DFS 伪代码模板//访问顶点u DFS(u){ vis[u]=true; //设置u已被访问 //访问从u出发可以到达的所有顶点v for(从u出发能到达的所有顶点v) { //如果v未被访问 if( vis[v] == false )原创 2017-11-17 20:06:37 · 788 阅读 · 0 评论 -
最小生成树的胡思乱想--做减法
最小生成树的胡思乱想–做减法今天看到最小生成树的算法 忽然想到 为什么现在的做法都是在 做加法呢? 为什么不尝试一下减法呢? 比如说我们的顶点数n,边数m n和m相差不多。 如果我们做加法的话要做 n-1条,假如说n比较大 但是我们如果**做减法, 应该只需要 ( m-(n-1) )条**, 因为前提已经有 (m-n)是一个很小的可以接受的数了, 所以原创 2017-11-19 17:33:11 · 252 阅读 · 0 评论 -
最小生成树--prim算法
最小生成树–prim算法首先说明,Dijkstra算法和prim算法实际上是相同的思路,只不过是数组d[]的含义不同。详见 算法笔记 P404 prim算法的基本思想是对图G设置集合S(就是个巨型防护罩),用来存放已经被访问的顶点(就是被攻占的城市),然后执行n次下面的两个步骤:1.每次从集合V-S(就是未被攻占的城市)中选择与集合S(巨型防护罩)最近的一个顶点(记为u),访问(即攻占)u并将原创 2017-11-19 20:13:39 · 306 阅读 · 0 评论 -
全源最短路问题--Floyd算法
全源最短路问题–Floyd算法Floyd算法,也就是弗洛伊德算法,用来解决全源最短路问题。就是对给定的图G,求任意两点u,v之间的最短路径长度,时间复杂度为O(n^3)。由于n^3的复杂度决定了顶点数n的限制约在200以内,因此使用邻接矩阵来实现Floyd算法是非常合适且方便的。Floyd算法基于一个事实: 如果存在顶点k,使得以k作为中介点时,顶点i和顶点j的当前最短距离缩短,则使用顶点k作为顶原创 2017-11-19 10:22:52 · 1309 阅读 · 0 评论 -
PAT1030
输入4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20输出0 2 3 3 40程序#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;//最大顶点数 const int MAXV=510;const原创 2017-11-19 08:54:37 · 345 阅读 · 0 评论 -
Dijkstra算法第二套模板程序
Dijkstra算法第二套模板程序//Dijkstra算法第二套模板程序//分两大步骤//1.使用Dijkstra算法记录所有最短路径//通俗的说,就是第一步只筛选 第一标尺 满足条件的情况,也就是最短路径。 //程序具体实现,固定化,不需要修改vector<int> pre[MAXV];void Dijkstra(int s) { fill(d,d+MAXV,INF);原创 2017-11-18 21:57:18 · 231 阅读 · 0 评论 -
最短路径变型题解法举例
最短路径变型题解法举例PAT A 1003输入5 6 0 21 2 1 5 30 1 10 2 20 3 11 2 12 4 13 4 1输出2 4//最短路径变型题解法举例//PAT A 1003#include <cstdio>#include <cstring>#include <algorithm>using namespace std;//最大顶点数 const原创 2017-11-18 19:33:46 · 291 阅读 · 0 评论 -
Dijkstra算法--变型题的求解
Dijkstra算法–变型题的求解//Dijkstra算法用来求最短距离 已经实现了//做题题型有变化,需要处理升级版/*//碰到有两条及以上可以达到最短距离的路径,题目就会给出第二标尺 //第一标尺是距离,要求在所有最短路径中选择第二标尺最优的一条路径。//// 第二标尺常见的有下面3种出题方法或组合// 1.给每条边再增加一个边权(比如花费),然后要求在最短路径有//原创 2017-11-18 17:39:37 · 440 阅读 · 0 评论 -
Dijkstra算法求最短路径
Dijkstra算法求最短路径//Dijkstra算法用来求最短距离 已经实现了//那么最短路径 如何求解并打印出来呢?//此处的方法是记录路径中结点的前驱if(v未被访问 && 以u为中介点可以使起点s到顶点v的最短距离d[v]更优 ) { 优化d[v]; 令v的前驱为u; } //程序具体实现,邻接矩阵版//n为顶点数,MAXV为最大顶点数int n,G[MAXV原创 2017-11-18 16:03:31 · 1179 阅读 · 0 评论 -
Dijkstra算法应用小例子
Dijkstra算法应用小例子输入6 8 00 1 10 3 40 4 41 3 22 5 13 2 23 4 34 5 3输出0 1 5 3 4 6编程//Dijkstra算法应用小例子//算法笔记 P368 亚历山大#include <cstdio>#include <algorithm>using namespace std;//最大顶点数 const int MA原创 2017-11-18 15:15:03 · 2851 阅读 · 1 评论 -
单源最短路径问题--Dijkstra
单源最短路径问题–Dijkstra首先,Dijkstra算法解决的是单源最短路问题,即给定图G(V,E)和起点s(起点又称为源点),求起点s到达其他顶点的最短距离。注意 Dijkstra算法只能应对所有边权都是非负数的情况,如果边权出现负数,那么迪杰斯特拉算法很可能会出错,这时最好使用SPFA算法。Dijkstra算法的策略是:设置集合S存放已被访问的顶点(即已攻占的城市),然后执行n次下面的原创 2017-11-18 13:21:09 · 479 阅读 · 0 评论 -
图的遍历程序模板–BFS
图的遍历程序模板–BFS//图的遍历:DFS 和 BFS//BFS 伪代码模板//遍历u所在的连通块BFS(u) { //定义队列q queue q; 将u入队; //设置u已被加入过队列 inq[u] = true; while(q非空) { 取出队首元素u进行访问; //枚举从u能直接到达的顶点v原创 2017-11-17 21:26:44 · 495 阅读 · 0 评论 -
最小生成树--kruskal
最小生成树–kruskal也加克鲁斯卡尔算法。kruskal算法的思想简单说来就是:每次选择图中最小边权的边,如果边两端的顶点在不同的连通块中,就把这条边加入最小生成树中。如果是稠密图(边多),用prim算法;如果是稀疏图(边少),用kruskal算法,或者用我自己想的“做减法”。//对于kruskal算法来说,由于需要判断边的两个端点//是否在不同的连通块中,因此边的两个端点的编号是一定//原创 2017-11-19 22:24:32 · 180 阅读 · 0 评论