最短路spfa
2014-02-16 15:55
246 查看
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define mxn 10020 #define inf 0x3f3f3f3f int first[mxn], nxt[mxn], to[mxn], cost[mxn], e; void add( int u, int v, int c ) { to[e] = v; cost[e] = c; nxt[e] = first[u]; first[u] = e++; } int dis[mxn], pre[mxn], in[mxn]; int q[mxn*10]; void spfa( int s ) { memset( dis, 0x3f, sizeof( dis ) ); memset( in, 0, sizeof( in ) ); int head = 0, tail = 0; q[tail++] = s; dis[s] = 0; in[s] = 1; pre[s] = -1; while( head < tail ) { int u = q[head++]; in[u] = 0; for( int i = first[u]; i != -1; i = nxt[i] ) { int v = to[i]; if( dis[v] > dis[u] + cost[i] ) { dis[v] = dis[u] + cost[i]; pre[v] = s; if( ! in[v] ) in[v] = 1, q[tail++] = v; } } } } int main() { int n, m; while( scanf( "%d%d", &n, &m ) != EOF ) { memset( first, -1 ,sizeof( first ) ); e = 0; for( int i = 1; i <= m; ++i ) { int u, v, c; scanf( "%d%d%d", &u, &v, &c ); add( u, v, c ); add( v, u, c ); } int st, end; scanf( "%d%d", &st, &end ); spfa( st ); if( dis[end] == inf ) printf( "-1\n" ); else printf( "%d\n", dis[end] ); } return 0; }
相关文章推荐
- poj 1511 Invitation Cards(spfa最短路)
- POJ3268 Silver Cow Party spfa求解 最短路
- hdu 1839 Delay Constrained Maximum Capacity Path 二分下限+最短路spfa
- 【最短路】【spfa】hdu6071 Lazy Running
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
- 例题11-11 赛车比赛 单源最短路 spfa
- Invitation Cards POJ - 1511 最短路spfa
- hdu 6181 Two Paths(最短路,spfa)
- CodeVS1077 多源最短路 解题报告【SPFA】
- HDU 2544-最短路(最短路spfa)
- 最短路-SPFA 模板
- Bellman Ford+SPFA队列优化(路径还原 输出最短路的路径)
- HDU 4460 Friend Chains(任意两点最短路的最大值 bfs或spfa)
- 最短路之SPFA模板
- Bellman变形得来的SPFA最短算法(不能含负环);Floyd求两点间最短路,求有向图的闭包;
- poj3268 Silver Cow Party (SPFA求最短路)
- hdu 1548 A strange lift 最短路(spfa)
- 洛谷 2737 麦香牛块 最短路SPFA? 解题报告
- poj 3767 I Wanna Go Home 最短路spfa
- 单源最短路SPFA(模板)