描述
万圣节的晚上,小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无向图)相关推荐

  1. 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解

     本文链接   :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...

  2. 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. :) ...

  3. 一文掌握SPFA算法

    一文掌握SPFA算法 何为SPFA(Shortest Path Faster Algorithm)算法: **给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其显著特 ...

  4. spfa算法_10行实现最短路算法——Dijkstra

    今天是算法数据结构专题的第34篇文章,我们来继续聊聊最短路算法. 在上一篇文章当中我们讲解了bellman-ford算法和spfa算法,其中spfa算法是我个人比较常用的算法,比赛当中几乎没有用过其他 ...

  5. JAVA编程求单源最短路径_【算法】单源最短路径——dijkstra算法

    一,概念 单源最短路径 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问 ...

  6. #1093 : 最短路径·三:SPFA算法(邻接表)

    #1093 : 最短路径·三:SPFA算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的晚上,小Hi和小Ho在吃过晚饭之后,来到了一个巨大的鬼屋! 鬼屋中一共 ...

  7. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法

    一.floyd 1.介绍 floyd算法只有五行代码,代码简单,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3),可以求多源最短路问题. 2.思想: Floyd算法的基本思想如下:从任意 ...

  8. 最短路径:Dijkstra、BellmanFord以及SPFA算法

    最短路径问题 1.Dijkstra算法 简介 (1)Dijkstra算法伪代码 (2)C++ 邻接表版代码 (3)优化 (4)题型分析 2.Bellman Ford算法 简介 (1)Bellman算法 ...

  9. 最短路径(Dijkstra、Bellman-Ford和SPFA算法)

    最短路径(Dijkstra.Bellman-Ford和SPFA算法) 前言 图的存储方式 邻接矩阵 邻接表 链表建立 利用vector 结构体 核心思路 Dijkstra算法 图解 基本思想 求解步骤 ...

最新文章

  1. find查找所有php,linux中的find命令—查找文件名
  2. 百(垃)度(圾)之星初赛B hdu6114
  3. RedMine项目管理系统邮件推送设置(Windows环境)
  4. Java 8:在新的Nashorn JS引擎中编译Lambda表达式
  5. Mapgis图转换为可导入软件的shp
  6. Java实现串口通信的小样例
  7. python的pass语句_Python | 演示pass语句的示例
  8. OPPO K9s官宣:5000mAh超大电量 充电功率阉割明显
  9. Lintcode 138. 子数组之和 [Easy]
  10. python 验证码
  11. maven手册(转)
  12. Qt之界面实现技巧——包括任务栏不显示,自定义窗体,最大化最小化按钮等等全面总结
  13. 2016年安全好用微信开通检测软件
  14. 教我如何使用python编写一个界面
  15. 白帽子黑客教你:如何下载Windows原版操作系统?(2种方式)
  16. kettle-增加序列
  17. 华为无线设备配置静态负载均衡
  18. 二叉树空指针个数的理解
  19. 企业微信的9个重要功能和7个小经验
  20. DREAM持久化历程

热门文章

  1. sql多变量 双引号设置
  2. 使用命令启动IIS管理器
  3. oracle 连接池sql跟踪,实现SQLServer、MySQL和oracle数据库连接池
  4. nginx通过用户和密码来实现认证功能
  5. Android Service详解(二)第一个Service
  6. objloader使用方法
  7. CentOS6 kvm添加网卡桥接口脚本
  8. PHP: to use scptask, you need to install the SSH extension.
  9. 关于程序员30/35岁以后就写不了代码(没前途)的问题。
  10. 数据结构习题精解 C语言实现+微课视频(习题解答、研考试题、微课视频)