ural Russian Pipelines(最短路)
2013-03-09 10:00
375 查看
题意:给出N个点和M条有向边,求给出的s点到t点的最短路。
思路:spfa,只是这题给出的是有向边,在存储的时候只存一条边就可以了,其他的和无向边一样。
代码:
View Code
思路:spfa,只是这题给出的是有向边,在存储的时候只存一条边就可以了,其他的和无向边一样。
代码:
View Code
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <algorithm> #include <queue> #include <math.h> #include <vector> #include <map> #define N 505 using namespace std ; int mp , dis , n ; bool vist ; queue<int>q ; void bfs( int s , int t ) { int x ; while( !q.empty()) q.pop() ; q.push( s ) ; vist[s] = true ; while( !q.empty()) { x = q.front() ; q.pop() ; vist[x] = false ; for ( int i = 1 ; i <= n ; i++ ) { if ( mp[x][i] && dis[i] < dis[x] + mp[x][i] ) { dis[i] = dis[x] + mp[x][i] ; if( !vist[i] ) { vist[i] = true ; q.push( i ) ; } } } } if ( dis[t] == 0 ) { printf ( "No solution\n" ) ; } else { printf ( "%d\n" , dis[t] ) ; } } int main() { int m , x , y , z , s , t ; while( scanf ( "%d%d" , &n , &m ) != EOF ) { memset( mp , 0 , sizeof( mp )) ; for ( int i = 0 ; i < m ; i++ ) { scanf ( "%d%d%d" , &x , &y , &z ) ; mp[x][y] = z ; } scanf ( "%d%d" , &s , &t ) ; if ( s == t ) { printf ( "0\n" ) ; } else { memset( dis , 0 , sizeof ( dis )) ; memset( vist , false , sizeof ( vist )) ; bfs( s , t ) ; } } return 0 ; }
相关文章推荐
- URAL 1980 Road to Investor(二分+最短路)
- URAL 1016. Cube on the Walk (分层图+最短路)
- spfa最短路 [URAL-1930]
- URAL 2034 Caravans(变态最短路)
- URAL 1450 无环图最短路
- ural 1325. Dirt(最短路)
- URAL 1072 Routing(最短路)
- URAL 1980 Road to Investor 二分+最短路
- URAL 1056 Computer Net(最短路)
- URAL 2069 Hard Rock (最短路)
- URAL 1002 Phone Numbers(KMP+最短路orDP)
- ural 1016 Cube on the Walk 状态压缩最短路
- URAL 2005. Taxi for Programmers (最短路 数学啊)
- URAL 2034 Caravans (最短路 + 二分)
- URAL 1085 Meeting(最短路)
- URAL 1934 Black Spot --- 简单最短路变形
- ural Shortest Subchain(最短路)
- URAL 1934 最短路变形
- DP/最短路 URAL 1741 Communication Fiend
- URAL 1934 Black Spot(最短路)