蓝桥杯——出差(JAVA写法)

简介: 蓝桥杯——出差(JAVA写法)

 题目链接:用户登录

 

问题描述

A 国有 NN 个城市, 编号为 1…N 。小明是编号为 1 的城市中一家公司的员 工, 今天突然接到了上级通知需要去编号为 N 的城市出差。

由于疫情原因, 很多直达的交通方式暂时关闭, 小明无法乘坐飞机直接从 城市 1 到达城市 NN, 需要通过其他城市进行陆路交通中转。小明通过交通信息 网, 查询到了 MM 条城市之间仍然还开通的路线信息以及每一条路线需要花费的 时间。

同样由于疫情原因, 小明到达一个城市后需要隔离观察一段时间才能离开 该城市前往其他城市。通过网络, 小明也查询到了各个城市的隔离信息。(由于 小明之前在城市 1 , 因此可以直接离开城市 1 , 不需要隔离)

由于上级要求, 小明希望能够尽快赶到城市 N, 因此他求助于你, 希望你 能帮他规划一条路线, 能够在最短时间内到达城市 N 。

输入格式

第 1 行: 两个正整数 N, M, 表示 A 国的城市数量, M 表示末关闭的路 线数量

第 2 行: N 个正整数, 第 ii个整数 C_Ci 表示到达编号为i 的城市后需要隔离 的时间

第 3 …M+2 行: 每行 3 个正整数, u, v, c 表示有一条城市 uu 到城市 vv的 双向路线仍然开通着, 通过该路线的时间为 c

输出格式

第 1 行: 1 个正整数, 表示小明从城市 1 出发到达城市 NN 的最短时间(到 达城市 N, 不需要计算城市 N 的隔离时间)

样例输入

4 4
5 7 3 4
1 2 4
1 3 5
2 4 3
3 4 5

image.gif

样例输出

13

image.gif

样例说明:

image.gif编辑

代码:

import java.util.Arrays;
import java.util.Scanner;
public class 出差 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int a[] = new int [n+1];
        int s[] = new int[n+1];
        for (int i = 1; i <= n; i++) {
            s[i] = sc.nextInt();
        }
        int dp[][] = new int[n+1][n+1];
        int f[] = new int[n+1];
        for (int i = 0; i < dp.length; i++) {
            for (int j = 0; j < dp[i].length; j++) {
                dp[i][j] = 9999;
            }
        }
        for (int i = 0; i < m; i++) {
            int w = sc.nextInt();
            int v = sc.nextInt();
            int c = sc.nextInt();
            dp[w][v] = c + s[v];
            dp[v][w] = c+ s[w];
        }
        for (int i = 1; i <=n; i++) {
            a[i] = dp[1][i];
        }
        int index=0;
        a[1] = 0;
        f[1] = 1;
        for (int i = 1; i <= n; i++) {
            int min = 9999;
            for (int j = 1; j <=n; j++) {
                if(f[j]==0&&a[j]<min) {
                    min = a[j];
                    index = j;
                }
            }
            f[index] = 1;
            for (int k = 1; k <=n; k++) {
                if(f[k]==0&&a[index]+dp[index][k]<a[k])
                    a[k] = a[index]+dp[index][k];
            }
        }
        System.out.println(a[n]-s[n]);
    }
}

image.gif


相关文章
|
4月前
|
人工智能 算法 Java
第十三届蓝桥杯B组Java(试题C:字符统计)
第十三届蓝桥杯B组Java(试题C:字符统计)
55 0
|
3月前
|
Java 数据安全/隐私保护 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-193 Password Suspects(C++&Java)
20 1
|
3月前
|
机器学习/深度学习 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-Java全排列公式
37 0
|
3月前
|
算法 Java
蓝桥杯算法题——题解Java版本——切面条
蓝桥杯算法题——题解Java版本——切面条
37 0
|
3月前
|
Java
2014年蓝桥杯Java C组——猜年龄
2014年蓝桥杯Java C组——猜年龄
24 0
2014年蓝桥杯Java C组——猜年龄
|
4月前
|
算法 Java 测试技术
蓝桥杯-02-蓝桥杯Java组考点与14届真题
蓝桥杯-02-蓝桥杯Java组考点与14届真题
|
4月前
|
Java
第十三届蓝桥杯B组Java(试题B:山)
第十三届蓝桥杯B组Java(试题B:山)
30 0
|
4月前
|
存储 Java API
第十三届蓝桥杯B组Java(试题A:星期计算)
第十三届蓝桥杯B组Java(试题A:星期计算)
43 0
|
5月前
|
SQL Java 数据库连接
③【Java组】蓝桥杯省赛真题 持续更新中...
③【Java组】蓝桥杯省赛真题 持续更新中...
33 0
|
5月前
|
Java
③【Java 组】蓝桥杯省赛真题 [黄金连分数][马虎的算式]持续更新中...
③【Java 组】蓝桥杯省赛真题 [黄金连分数][马虎的算式]持续更新中...
28 0