最短路spfa

来源:互联网 发布:sql with cte as 编辑:程序博客网 时间:2024/03/29 16:18
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define mxn 10020#define inf 0x3f3f3f3fint 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" );elseprintf( "%d\n", dis[end] );}return 0;}


0 0
原创粉丝点击