最短路算法--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] ...
随机推荐
- 使用github的感想
github的仓库链接:https://github.com/liyan941016/test github是一个基于git的代码托管平台,要想使用github第一步就要注册账户,然后要创建一个仓库 ...
- SE Springer小组之《Spring音乐播放器》可行性研究报告一、二(转载)
此文转载自组员小明处~~ 1 引言 1.1编写目的 <软件工程>课程,我们团队计划开发一个音乐播放器.本文档是基于网络上现有的音乐播放器的特点,团队计划实现的音乐播放器功能和团队 ...
- SQL中常用函数
SELECT CONVERT(varchar(100), GETDATE(), 23) AS 日期 结果:2017-01-05 select ISNULL(price,'0.0') ...
- zookeeper安装(Linux)
安装环境: Linux:centos6.4 Jdk:1.7以上版本 Zookeeper是java开发的可以运行在windows.linux环境.需要先安装jdk. 安装步骤: 第一步:安装jdk 第二 ...
- ES6.0简单了解
Case 1:let.const var的缺陷 1.可以重复声明变量 2.无法限制修改(没有常量) 3.没有块级作用域 let和const可以弥补var的缺陷 let: 不能重复声明,用来声明变量,声 ...
- Activiti的部署问题
http://www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html 既可以通过每次Spring应用程序启动时,执行部署命令. ...
- [cnbeta]iPhone 2018年全球出货2.25亿部:中国区下滑两成
iPhone 2018年全球出货2.25亿部:中国区下滑两成 2019年01月22日 20:12 501 次阅读 稿源:快科技 0 条评论 https://www.cnbeta.com/artic ...
- Qt__QMessageBox
转自豆子空间 显示窗口 Qt提供了五个类似的接口,用于显示类似的窗口. QMessageBox::information(NULL, "Title", "Content& ...
- React onWheel
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- ubuntu安装steam
增加第三方自由库的软件支持 sudo add-apt-repository multiverse 增加更新支持包 sudo add-apt-repository multiverse 安装steam ...