最短路算法--SPFA+嵌套map
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn=; int T,S,D;
int want[maxn];
int nex[maxn];
map<int ,map<int ,int > >mymap; bool visited[maxn];
int dist[maxn]; void SPFA()
{
memset(visited,false,sizeof(visited));
for(int i=;i<maxn;i++)
dist[i]=INF; //起初我把与0临近的城市的dist[]值也赋成了0
//这样做是错误的
//因为如果与0临近的城市的dist[]值为0,那么0就不会松弛与其相邻的边,直接跳出循环
dist[]=;
queue<int >que;
while(!que.empty())
que.pop();
que.push(); while(!que.empty())
{
int u=que.front();
que.pop();
visited[u]=false; for(map<int ,int >::iterator it=mymap[u].begin();it != mymap[u].end();++it)
{
int v=it->first;
int weight=it->second;
if(dist[v] > dist[u]+weight)
{
dist[v]=dist[u]+weight;
if(!visited[v])
{
que.push(v);
visited[v]=true;
}
}
}
}
} int main()
{
while(~scanf("%d%d%d",&T,&S,&D))
{
mymap.clear();
for(int i=;i<=T;i++)
{
int a,b,time;
scanf("%d%d%d",&a,&b,&time);
if(!mymap[a].count(b))
{
mymap[a][b]=time;
mymap[b][a]=time;
}
else
{
mymap[a][b]=(mymap[a][b] > time ? time:mymap[a][b]);
mymap[b][a]=(mymap[b][a] > time ? time:mymap[b][a]);
}
}
for(int i=;i<=S;i++)
{
scanf("%d",nex+i);
mymap[][nex[i]]=;
}
for(int i=;i<=D;i++)
scanf("%d",want+i);
SPFA();
int ans=dist[want[]];
for(int i=;i<=D;i++)
ans=(dist[want[i]] < ans ? dist[want[i]]:ans);
printf("%d\n",ans);
}
return ;
}
最短路算法--SPFA+嵌套map的更多相关文章
- 最短路算法 -- SPFA模板
一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...
- 最短路算法——SPFA
用途: 单源最短路径,不可以处理含负权边的图但可以用来判断是否存在负权回路: 复杂度O(kE) [k <= 2, E 为边数]: 算法核心: Bellman-Ford 算法的优化,实质与前算法一 ...
- 最短路算法详解(Dijkstra/SPFA/Floyd)
新的整理版本版的地址见我新博客 http://www.hrwhisper.me/?p=1952 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短路.所以Dijkst ...
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- 【最短路算法】Dijkstra+heap和SPFA的区别
单源最短路问题(SSSP)常用的算法有Dijkstra,Bellman-Ford,这两个算法进行优化,就有了Dijkstra+heap.SPFA(Shortest Path Faster Algori ...
- 最短路算法(floyed+Dijkstra+bellman-ford+SPFA)
最短路算法简单模板 一.floyed算法 首先对于floyed算法来说就是最短路径的动态规划解法,时间复杂度为O(n^3) 适用于图中所有点与点之间的最短路径的算法,一般适用于点n较小的情况. Flo ...
- 算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA
今天是算法数据结构专题的第33篇文章,我们一起来聊聊最短路问题. 最短路问题也属于图论算法之一,解决的是在一张有向图当中点与点之间的最短距离问题.最短路算法有很多,比较常用的有bellman-ford ...
- 浅谈k短路算法
An Old but Classic Problem 给定一个$n$个点,$m$条边的带正权有向图.给定$s$和$t$,询问$s$到$t$的所有权和为正路径中,第$k$短的长度. Notice 定义两 ...
- Book 最短路算法
用HDU2544整理一下最近学的最短路算法 1.Dijkstra算法 原理:集合S表示已经找到最短路径的点,d[]表示当前各点到源点的距离 初始时,集合里面只有源点,当每个点u进入集合S时,用d[u] ...
随机推荐
- MySQL针对Swap分区的运维注意点
Linux有很多很好的内存.IO调度机制,但是并不会适用于所有场景.对于运维人员来说,Linux比较让人头疼的一个地方是:它不会因为MySQL很重要就避免将分配给MySQL的地址空间映射到swap上. ...
- ZooKeeper 典型的应用场景——及编程实现
如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...
- Visual Studio2013安装过程以及单元测试
一.安装环境 操作系统版本:Windows10家庭中文版64位 CPU:i5-4200u 1.60GHz 硬盘内存:750G 二.安装版本 Visual Studio2013 三.安装过程 Visu ...
- Zookeeper 源码学习(一)环境搭建
前言 最近准备学习 Zookeeper,想从 Zookeeper 开始逐步深入了解各类中间件,学习分布式计算. 下载源码 执行指令,下载代码: git clone https://github.com ...
- 网络:Xen理解
Xen是由剑桥大学计算机实验室开发的一个开源项目.是一个直接运行在计算机硬件之上的用以替代操作系统的软件层,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS). 一.Xen虚拟化类型 ...
- 转【c语言】两个堆栈组成一个队列
假设有两个堆栈,分别是s1,s2,现在有数列“1,2,3,4,5”,要让这个数列实现先进先出的功能,也就是用两个堆栈组成一个队列,如何实现? 分析: 先将数列压入栈s1,数列在栈中由顶到底的元素为“5 ...
- Eclipse的Jar包解压出System.js里String与Boolean定义分号可有可无吗?
Eclipse的Jar包解压出System.js里String与Boolean定义分号可有可无吗? org.eclipse.wst.jsdt.core_1.3.300.v201410221502\li ...
- vue的使用1
Vue.$set(object, key, value); <!-- Alt + C --> <input @keyup.alt.="clear"> < ...
- zabbix 使用问题两个--中文乱码,以及监控ESXi下的虚拟机
1. 中文乱码 最开始中文显现 长方形不显示文字.解决办法: c:\windows\fonts 下面复制 楷体的字体(字体随意看自己喜欢) 文件名一般为: simkai.ttf 2.将simkai.t ...
- Jquery 组 tbale表格筛选
<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...