因为是稀疏图,所以应当选择邻接表来存储

构造一个邻接表

这只是我的构造方法,有很多种更好的构造方法,大家可以自己去构造

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)的更多相关文章

  1. 带权单源最短路发[稠密图](Dijkstra)

    对于稠密图,采用邻接矩阵较为合适 所以我们先构建一个邻接矩阵 typedef int Vertex; typedef int WeightType; //图 typedef struct MyGrap ...

  2. 单源最短路模板(dijkstra)

    单源最短路(dijkstra算法及堆优化) 弱化版题目链接 n^2 dijkstra模板 #include<iostream> #include<cstdio> #includ ...

  3. 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home

    https://vjudge.net/contest/66569#problem/A http://blog.csdn.net/wangjian8006/article/details/7871889 ...

  4. [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)

    Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...

  5. 模板C++ 03图论算法 1最短路之单源最短路(SPFA)

    3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...

  6. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  7. 【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条无向边的图,每条边权都为正.令 ...

  8. 2018/1/28 每日一学 单源最短路的SPFA算法以及其他三大最短路算法比较总结

    刚刚AC的pj普及组第四题就是一种单源最短路. 我们知道当一个图存在负权边时像Dijkstra等算法便无法实现: 而Bellman-Ford算法的复杂度又过高O(V*E),SPFA算法便派上用场了. ...

  9. 【算法】单源最短路——Dijkstra

    对于固定起点的最短路算法,我们称之为单源最短路算法.单源最短路算法很多,最常见的就是dijkstra算法. dijkstra主要用的是一种贪心的思想,就是说如果i...s...t...j是最短路,那么 ...

随机推荐

  1. Google Colab Notebook 的外部文件引用配置

    Google Colab Notebook 的外部文件引用配置 Reference: How to upload the file and read Google Colab 先装工具:google- ...

  2. !!代码:baidu 分享

    改参数,可以改图标的尺寸:16x16.24x24.32x32 <!DOCTYPE html> <html> <head> <title></tit ...

  3. PHP获取手机型号

    <?php $user_agent = $_SERVER['HTTP_USER_AGENT'];     if (stripos($user_agent, "iPhone") ...

  4. A CLOSER LOOK AT CSS

    A CLOSER LOOK AT CSS css-review Congratulations! You worked hard and made it to the end of a challen ...

  5. 尚硅谷springboot学习24-错误处理

    1.SpringBoot默认的错误处理机制 默认效果: ​ 1).浏览器,返回一个默认的错误页面

  6. faster rcnn源码阅读笔记2

  7. Truthy真值

    在 JavaScript 中,Truthy (真值)指的是在 布尔值 上下文中转换后的值为真的值.所有值都是真值,除非它们被定义为 falsy (即除了 false,0,"",nu ...

  8. VirtualBox 安装Mac OS

    2019年3月2日14:17:27 今日打开自己的Virtual box提示 被召者 RC: REGDB_E_CLASSNOTREG (0x80040154) https://blog.csdn.ne ...

  9. “AS3.0高级动画编程”学习:第三章等角投影(上)

    什么是等角投影(isometric)? 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 刚接触这个概念时,我也很茫然,百度+google了N天后,找到了一些文章: [转 ...

  10. WD Elements 与 time machine

    备份是很重要的问题. 之前买了一个 WD Elements,想要格式化成 HFS 的格式. 不然不能被 Time Machine 使用. 但是用磁盘工具不能成功,因为 EFI 分区的问题. 参考下面网 ...