• SSL 1636——城市交通


    Description

      有n个城市,编号1~n,有些城市之间有路相连,有些则没有,有路则当然有一个距离。现在规定只能从编号小的城市到编号大的城市,问你从编号为1的城市到编号为n的城市之间的最短距离是多少?

    Input

    先输入一个n,表示城市数,n小于100。
    下面的n行是一个n*n的邻接矩阵map[i,j],其中map[i,j]=0表示城市i和城市j之间没有路相连,否则为两者之间的距离。

    Output

    输出格式:一个数,表示最少要多少时间。
    输入数据保证可以从城市1飞到城市n。

    Sample Input

    11
    0 5 3 0 0 0 0 0 0 0 0
    5 0 0 1 6 3 0 0 0 0 0
    3 0 0 0 8 0 4 0 0 0 0
    0 1 0 0 0 0 0 5 6 0 0
    0 6 8 0 0 0 0 5 0 0 0
    0 3 0 0 0 0 0 0 0 8 0
    0 0 4 0 0 0 0 0 0 3 0
    0 0 0 5 5 0 0 0 0 0 3
    0 0 0 6 0 0 0 0 0 0 4
    0 0 0 0 0 8 3 0 0 0 3
    0 0 0 0 0 0 0 3 4 3 0
    这里写图片描述
    Sample Output

    13


    一道dp题,听说可以最短路做。
    两个循环即可ACE也
    动态转移方程为f[i]:=min(f[i],f[j]+a[j,i])
    先要将f[i]设为maxlongint
    一重循环枚举从哪个点出发
    一重循环枚举到哪个点


    代码如下:

    var  n,i,j,min:longint;
         a:array[0..101,0..101]of longint;
         f:array[0..100]of longint; 
    begin
      readln(n);
      for i:=1 to n do
        begin
          for j:=1 to n do read(a[i,j]);
          readln;
        end;
      f[1]:=0;
      for i:=2 to n do
        begin
          min:=maxlongint;
          for j:=1 to i-1 do
            if a[j,i]<>0 then
              if f[j]+a[j,i]<min then min:=f[j]+a[j,i];
          f[i]:=min;
        end;
      write(f[n]);
    end.
  • 相关阅读:
    java的各种日志框架
    (4)一起来看下mybatis框架的缓存原理吧
    (3)一起来看下使用mybatis框架的select语句的源码执行流程吧
    Markdown基本语法
    openstack中使用linux_bridge实现vxlan网络
    python基础—第一句Python语句以及条件语句
    Java内存详解
    Java工具类练习题和答案
    面向过程和面向对象
    网页设计案例
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412397.html
Copyright © 2020-2023  润新知