#include

kuangbin专题四 C Heavy Transportation

kuangbin 专题四 最短路练习
POJ 1797 题 
C - Heavy Transportation 

题目链接:http://poj.org/problem?id=1797

题意:n 个 点 m 个通道 , 从 1 -> n 最少存在一条不同的路径 , 计算 从 1 -> n 所有路径上 权值最小的那条边 权值最大为多少

思路: 最多存在 1000 个点 (肯定不用floyd算法)

   可以有 dijksual 算法 改编一下得到目标算法 。

   添加新点时 每次添加和 权值最大的边点 , 

    用最大的最小权值 维护 新的 从 1 ->未添加点的 距离(直接或者间接)

 

AC代码:

/*题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载量,现在我要从1点运送货物到n点,求能运送货物的最大重量。
对于数据,第一行为t代表测试数据个数,第二行为n和m(意义见上),接着m行,每行三个整数分别是代表一条边的起点,
终点及最大承重量。输出能运送货物的最大重量,格式见样例。注意数据输完后还要再多输一个空行。
对于数据,从1运到3有两种方案
方案1:1-2-3,其中1-2承重为3,2-3承重为5,则可以运送货物的最大重量是3(当大于3时明显1到不了2)
方案2:1-3,可知1-3承重为4,故此路可运送货物的最大重量是4,故答案输出4
*/ 
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std ; 

#define len 1005
 
int map[len][len] ; 
int t, n , m , Case=0;

int dijkstra(){
    int visit[len] = {0} ; 
    int d[len]  , v ; 
    for(int i=1 ; i<=n ; i++){ // 1号道路和 i 号道路交叉路口的承重 
        d[i] = map[1][i] ; //d[i] = 0 时代表不相邻 
    }
    for(int i =1 ; i<=n ; i++){// 探测 n 个街道 
        int f=-1 ; 
        for(int j=1; j <= n ; j++){ // 每次从n个街道里面选出承重最大的 
            if(!visit[j] && d[j] > f ){
                f= d[j] ; 
                v = j ;  
            }
        } 
        visit[v] = 1 ;// 将找到的从1到v最大承重标记 
        for(int j=1 ; j<=n ; j++){//从找到的路口往下探测 
            
            if(!visit[j] && d[j] < min(d[v] , map[v][j])){
            // 更新道路 v 与 道路 j 形成的路口 到道路 1 的最大承重 
                d[j] = min(d[v] , map[v][j]) ; 
            }
        } 
    } 
    return d[n] ; 
}

int main(){
     
    scanf("%d" , &t) ; 
    while(t--){
        
        scanf("%d%d" , &n , &m) ; //   n 条街道  , m 个路口 
        memset(map , 0 , sizeof(map)) ; // 初始化所有路口承重为零 
        int a , b , c ; 
        for(int i=1 ; i<=m ; i++){ // m 个路口 
            scanf("%d%d%d" , &a, &b , &c ) ; 
            map[a][b] = map[b][a] = c ; 
        }
        printf("Scenario #%d:\n", ++Case)  ; 
        printf("%d\n\n" , dijkstra()) ; 
    }
    return 0 ; 
} 

 

posted @ 2017-09-26 15:57  0一叶0知秋0  阅读(301)  评论(0编辑  收藏  举报