最短路径·三:SPFA算法 HihoCoder - 1093 (spfa无向图)
描述
万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋!
鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路。
不过这个鬼屋虽然很大,但是其中的道路并不算多,所以小Hi还是希望能够知道从入口到出口的最短距离是多少?
输入
每个测试点(输入文件)有且仅有一组测试数据。
在一组测试数据中:
第1行为4个整数N、M、S、T,分别表示鬼屋中地点的个数和道路的条数,入口(也是一个地点)的编号,出口(同样也是一个地点)的编号。
接下来的M行,每行描述一条道路:其中的第i行为三个整数u_i, v_i, length_i,表明在编号为u_i的地点和编号为v_i的地点之间有一条长度为length_i的道路。
对于100%的数据,满足N<=10^5,M<=10^6, 1 <= length_i <= 10^3, 1 <= S, T <= N, 且S不等于T。
对于100%的数据,满足小Hi和小Ho总是有办法从入口通过地图上标注出来的道路到达出口。
输出
对于每组测试数据,输出一个整数Ans,表示那么小Hi和小Ho为了走出鬼屋至少要走的路程。
Sample Input
5 10 3 5
1 2 997
2 3 505
3 4 118
4 5 54
3 5 480
3 4 796
5 2 794
2 5 146
5 4 604
2 5 63
output
172
#include <cstring>
#include <cstdio>
#define maxn 1000010
#define INF 0x7fffffff
using namespace std;
struct node
{int to,next,weight;}edge1[maxn];
int n,m;
int idx1;
int first1[maxn];
long long sum;
int dist[maxn],vis[maxn],q[maxn*2];
void add(int u,int v,int w)
{edge1[idx1].to=v;edge1[idx1].weight=w;edge1[idx1].next=first1[u];first1[u]=idx1;idx1++;
}void spfa(int start,node *Edge,int *first)
{int head=0,tail=1;memset(q,0,sizeof(q));for(int i=0;i<=n;++i){dist[i]=INF;vis[i]=0;}dist[start]=0;vis[start]=1;q[1]=start;while(head<tail){head++;int x=q[head];vis[x]=0;for(int i=first[x];i!=0;i=Edge[i].next){int y=Edge[i].to;if(dist[y]>dist[x]+Edge[i].weight){dist[y]=dist[x]+Edge[i].weight;if(!vis[y]){q[++tail]=y;vis[y]=1;}}}}}
int main()
{int c,u,v,w,start,end;while(cin>>n>>m>>start>>end){memset(first1,0,sizeof(first1));idx1=1;for(int i=0;i<m;++i){scanf("%d%d%d",&u,&v,&w);//cin>>u>>v>>w;add(u,v,w);add(v,u,w);//无向图要搞两次}sum=0;// int start,end;// cin>>start>>end;spfa(start,edge1,first1);//spfa(start,edge1,first1);cout<<dist[end]<<endl;}return 0;
}
最短路径·三:SPFA算法 HihoCoder - 1093 (spfa无向图)相关推荐
- 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解
本文链接 :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...
- I won't tell you this is about graph theory----zjfc bellman-ford算法与spfa算法
题目描述 To think of a beautiful problem description is so hard for me that let's just drop them off. :) ...
- 一文掌握SPFA算法
一文掌握SPFA算法 何为SPFA(Shortest Path Faster Algorithm)算法: **给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特 ...
- spfa算法_10行实现最短路算法——Dijkstra
今天是算法数据结构专题的第34篇文章,我们来继续聊聊最短路算法. 在上一篇文章当中我们讲解了bellman-ford算法和spfa算法,其中spfa算法是我个人比较常用的算法,比赛当中几乎没有用过其他 ...
- JAVA编程求单源最短路径_【算法】单源最短路径——dijkstra算法
一,概念 单源最短路径 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问 ...
- #1093 : 最短路径·三:SPFA算法(邻接表)
#1093 : 最短路径·三:SPFA算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋! 鬼屋中一共 ...
- (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法
一.floyd 1.介绍 floyd算法只有五行代码,代码简单,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3),可以求多源最短路问题. 2.思想: Floyd算法的基本思想如下:从任意 ...
- 最短路径:Dijkstra、BellmanFord以及SPFA算法
最短路径问题 1.Dijkstra算法 简介 (1)Dijkstra算法伪代码 (2)C++ 邻接表版代码 (3)优化 (4)题型分析 2.Bellman Ford算法 简介 (1)Bellman算法 ...
- 最短路径(Dijkstra、Bellman-Ford和SPFA算法)
最短路径(Dijkstra.Bellman-Ford和SPFA算法) 前言 图的存储方式 邻接矩阵 邻接表 链表建立 利用vector 结构体 核心思路 Dijkstra算法 图解 基本思想 求解步骤 ...
最新文章
- find查找所有php,linux中的find命令—查找文件名
- 百(垃)度(圾)之星初赛B hdu6114
- RedMine项目管理系统邮件推送设置(Windows环境)
- Java 8:在新的Nashorn JS引擎中编译Lambda表达式
- Mapgis图转换为可导入软件的shp
- Java实现串口通信的小样例
- python的pass语句_Python | 演示pass语句的示例
- OPPO K9s官宣:5000mAh超大电量 充电功率阉割明显
- Lintcode 138. 子数组之和 [Easy]
- python 验证码
- maven手册(转)
- Qt之界面实现技巧——包括任务栏不显示,自定义窗体,最大化最小化按钮等等全面总结
- 2016年安全好用微信开通检测软件
- 教我如何使用python编写一个界面
- 白帽子黑客教你:如何下载Windows原版操作系统?(2种方式)
- kettle-增加序列
- 华为无线设备配置静态负载均衡
- 二叉树空指针个数的理解
- 企业微信的9个重要功能和7个小经验
- DREAM持久化历程
热门文章
- sql多变量 双引号设置
- 使用命令启动IIS管理器
- oracle 连接池sql跟踪,实现SQLServer、MySQL和oracle数据库连接池
- nginx通过用户和密码来实现认证功能
- Android Service详解(二)第一个Service
- objloader使用方法
- CentOS6 kvm添加网卡桥接口脚本
- PHP: to use scptask, you need to install the SSH extension.
- 关于程序员30/35岁以后就写不了代码(没前途)的问题。
- 数据结构习题精解 C语言实现+微课视频(习题解答、研考试题、微课视频)