spfa模板
来源:互联网 发布:c语言用什么编译器好 编辑:程序博客网 时间:2024/05/17 04:50
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>#include <queue>using namespace std;const int inf =0x7ffffff;const int maxn=300001;//点数struct edge{ int from,to,w,next;}e[1000001];//边数int head[maxn];int vis[maxn];int dist[maxn];int n,m,t;//n个点,m条边,t用来生成边的标号void init()//建图前运行init{t=0; memset(head,-1,sizeof(head));}void add(int i,int j,int w){ e[t].from=i; e[t].to=j; e[t].w=w; e[t].next=head[i]; head[i]=t++;}void spfa(int s){ queue <int> q; for(int i=1;i<=n;i++) dist[i]=inf; memset(vis,false,sizeof(vis)); q.push(s); dist[s]=0; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=false; for(int i=head[u];i!=-1;i=e[i].next) { int v=e[i].to; if(dist[v]>dist[u]+e[i].w) { dist[v]=dist[u]+e[i].w; if(!vis[v]) { vis[v]=true; q.push(v); } } } }}int main(){ int a,b,c,s,e; scanf("%d%d",&n,&m);init(); while(m--) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); } scanf("%d%d",&s,&e); spfa(s); if(dist[e]==inf) printf("-1\n"); else printf("%d\n",dist[e]); return 0;}
0 0
- spfa模板
- spfa 模板
- SPFA模板
- SPFA 模板
- Spfa模板
- spfa---模板
- SPFA(模板)
- spfa模板
- SPFA模板
- SPFA 模板
- SPFA模板
- SPFA模板
- SPFA模板
- SPFA模板
- SPFA模板
- spfa 模板
- spfa 模板
- SPFA 模板
- Map集合类比较
- linux shell编程awk、sed调用方法
- mesh repair
- AVR_BootLoader设计及实现
- Ubuntu操作命令备忘录(不定时更新)
- spfa模板
- 阻塞队列(BlockingQueue)源码分析
- 黑马程序员_IO流(三)——InputStream,OutputStream
- C++ string类取字符串的左右子串(以特定子串为分界限)
- 计算机视觉、机器学习相关领域论文和源代码大集合
- redis 入门书
- POJ 2230 欧拉回路变型
- MAKE_RESTARTS
- uva 11691 - Allergy Test(状态压缩+记忆化)