zoukankan      html  css  js  c++  java
  • 最短路径问题

    题目描述

    NowCoder今年买了一辆新车,他决定自己开车回家过年。回家过程中要经过n个大小收费站,每个收费站的费用不同,你能帮他计算一下最少需要给多少过路费吗?

    输入描述:

    输入包含多组数据,每组数据第一行包含两个正整数m(1≤m≤500)和n(1≤n≤30),其中n表示有n个收费站,编号依次为1、2、…、n。出发地的编号为0,终点的编号为n,即需要从0到n。

    紧接着m行,每行包含三个整数f、t、c,(0≤f, t≤n; 1≤c≤10),分别表示从编号为f的地方开到t,需要交c元的过路费。

    输出描述:

    对应每组数据,请输出至少需要交多少过路费。

    输入

    8 4
    0 1 10
    0 2 5
    1 2 2
    1 3 1
    2 1 3
    2 3 9
    2 4 2
    3 4 4

    输出

    7

    #include "stdio.h"
    int main(){
        int a[31][31];
        int m,n;
        while(scanf("%d%d",&m,&n)!=EOF){
            for(int i=0;i<31;i++){
                for(int j=0;j<31;j++){
                    a[i][j]=0;
                }
            }
            int f,t,c;
            for(int i=0;i<m;i++){
                scanf("%d%d%d",&f,&t,&c);
                a[f][t]=c;
            }
            for(int k=0;k<=n;k++){
                for(int i=0;i<=n;i++){
                    for(int j=0;j<=n;j++){
                        if(k!=i&&k!=j&&i!=j){
                            if(a[i][k]>0&&a[k][j]>0&&a[i][j]>0)
                            a[i][j]=(a[i][k]+a[k][j])<a[i][j]?a[i][k]+a[k][j]:a[i][j];
                            else if(a[i][k]>0&&a[k][j]>0&&a[i][j]==0)
                              a[i][j]=a[i][k]+a[k][j];
                        }
                    }
                }
            }
            printf("%d
    ",a[0][n]);
        }
    }
  • 相关阅读:
    产品微谈
    SVN回滚机制
    super究竟是个啥?
    PM12条
    CocoaPods初体验
    UIView局部点击
    Memory cycles about Block
    About "self"
    openfire学习(一)
    WPF菜单和布局(2)
  • 原文地址:https://www.cnblogs.com/achao123456/p/10163955.html
Copyright © 2011-2022 走看看