zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    【计网实验6】静态路由实验
    【计网】第六章
    【操统5】第六章/第七章
    【计网 6】链路层
    【Java学习1】
    【机器学习1】
    【计网实验】packet
    【计网】第五章网络层:控制平面
    python中math模块常用的方法整理
    使用python如何进行截小图
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412397.html
Copyright © 2011-2022 走看看