带权单源最短路[稀疏图](Dijkstra)
因为是稀疏图,所以应当选择邻接表来存储
构造一个邻接表
这只是我的构造方法,有很多种更好的构造方法,大家可以自己去构造
typedef int vertex;
typedef int WeightType; //邻接表中单链表的节点
typedef struct ArcNode
{
int to;
WeightType weight;
struct ArcNode *next;
}ArcNode; //顶点, 存放顶点信息和一个指向第一个与该顶点相连的节点
typedef struct Node
{
vertex id;
ArcNode *first;
}Node; //图
typedef struct LGraph
{
int v, e;
Node G[MaxVertexNum];
}LGraph;
因为是稀疏图,所以我们应该使用最小堆来选择当前最小的dist节点
//稀疏图我们使用一个最小堆的数据结构
//这里我们自定义一个最小堆 void Dijkstra(int dist[], vertex path[], LGraph& g, vertex id)
{
//自定义的最小堆, 我们就用c++中的名字
priority_queue q;
//定义是否被收入集合
int collection[MaxVertexNum];
memset(collection, , sizeof(collection)); dist[id] = ;
q.push(id, dist[id]);
while(!q.empty())
{
vertex v = q.pop().id;
//将v加入收入集合
collection[v] = ; ArcNode *t = g.G[v].first;
while(t->next)
{
vertex i = t->to;
//这里查找v的所有邻接节点,更新他们的最短距离
//这里的i应该没有被收入,也就是说collection[i] == 0
//因为如果i已经被收入, 并且满足dist[i] > dist[v] + t->weight
//就说明v比i到id的距离更短,所以v应当先被收入,构成矛盾
if(collection[i] == && dist[i] > dist[v] + t->weight)
{
dist[i] = dist[v] + t->weight;
path[i] = v;
//将这个距离加入到最小堆中
q.push(i, dist[i]);
}
}
}
}
新手,欢迎大家找错误,提意见。
带权单源最短路[稀疏图](Dijkstra)的更多相关文章
- 带权单源最短路发[稠密图](Dijkstra)
对于稠密图,采用邻接矩阵较为合适 所以我们先构建一个邻接矩阵 typedef int Vertex; typedef int WeightType; //图 typedef struct MyGrap ...
- 单源最短路模板(dijkstra)
单源最短路(dijkstra算法及堆优化) 弱化版题目链接 n^2 dijkstra模板 #include<iostream> #include<cstdio> #includ ...
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...
- [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)
Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)
题目: Sample Input4 6 10001 3 21 4 42 1 32 3 33 4 14 2 2Sample Output28 38 题意: 给出n个节点m条无向边的图,每条边权都为正.令 ...
- 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结
刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...
- 【算法】单源最短路——Dijkstra
对于固定起点的最短路算法,我们称之为单源最短路算法.单源最短路算法很多,最常见的就是dijkstra算法. dijkstra主要用的是一种贪心的思想,就是说如果i...s...t...j是最短路,那么 ...
随机推荐
- Servlet工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 S ...
- Linux下MySQL5.7.18 yum方式从卸载到安装
本文出处:http://www.cnblogs.com/wy123/p/6932166.html 折腾了大半天,看了想,想了看,总算是弄清楚yum安装的过程了,之前写过二进制包安装的,这里用yum安装 ...
- spring boot+kafka整合
springboot版本是2.0.4 首先,在maven中引入spring-kafka的jar包 <dependency> <groupId>org.springframewo ...
- 循环TRUNCATE表,再ENABLE约束索引等
CREATE OR REPLACE PROCEDURE STG.FP_REMOVE_MST_OLD_DATA (EXITCODE OUT NUMBER) IS /******************* ...
- 【VBA】セールの最初起動時、VBAを自動的に実行方法
方法一 セールの「ThisWorkbook」にて.「Workbook」の「Open」関数にて.ロジックを追加する Private Sub Workbook_Open() Msgbox "He ...
- php json 写入 mysql 的例子
$a['aaa']='aaaa'; $a['bbb']='bbb'; $a['ccc']='ccc'; $arr['step_name']='kfkf'; $arr['process_name']=' ...
- 网络文件系统NFS
NFS介绍 什么是NFS? NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用 ...
- 100-days: fifteen
Title: Disney(迪士尼) moves from behemoth to colossus with closing(使…结束,使停止) of Fox(福克斯) deal(商业上的交易/协议 ...
- 46 【golang项目】完成了一个小小的播放器功能
项目地址:https://github.com/helww/mylab/tree/master/go/player 这个项目中用到了readme说明文件是一个markdown文件. 基础的控制语法,网 ...
- swift 设置阴影和圆角
1.正常view设置阴影 func setShadow(view:UIView,sColor:UIColor,offset:CGSize, opacity:Float,radius:CGFloat) ...