蓝桥杯——出差(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


相关文章
|
6月前
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
54 4
|
6月前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
35 4
|
6月前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
49 3
|
6月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
54 2
|
6月前
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
40 1
|
6月前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
46 1
|
6月前
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
39 0
|
6月前
|
算法 Java 编译器
第十五届蓝桥杯Java软件开发大学B组自我经验小结
第十五届蓝桥杯Java软件开发大学B组自我经验小结
55 0
|
6月前
|
Java API
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
备战第十五届蓝桥杯Java软件开发大学B组常见API记录
49 0
|
6月前
|
Java
2023蓝桥杯大赛省赛Java大学B组 矩形总面积
2023蓝桥杯大赛省赛Java大学B组 矩形总面积
26 0