美文网首页
老张的路

老张的路

作者: 在阳光下睡觉 | 来源:发表于2022-09-08 22:53 被阅读0次

利用最小生成树找到能够遍历全部节点的最短路径

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("data.txt")));
        String[] inputs = br.readLine().trim().split(" ");
        int n = Integer.parseInt(inputs[0]);
        int m = Integer.parseInt(inputs[1]);
        int[][] edge = new int[n + 1][n + 1];

        for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= n; j++) {
                edge[i][j] = -1;
            }
        }
        String[] us = br.readLine().trim().split(" ");
        String[] vs = br.readLine().trim().split(" ");
        String[] ws = br.readLine().trim().split(" ");

        for (int i = 0; i < m; i++) {
            int u = Integer.parseInt(us[i]);
            int v = Integer.parseInt(vs[i]);
            int len = Integer.parseInt(ws[i]);
            edge[u][v] = len;
            edge[v][u] = len;
        }

        Map<Integer, Integer> mp = new HashMap<>(); // 用来记录已访问的节点
        List<Integer> vt = new ArrayList<>(); // 访问顺序

        // 从第一个节点开始
        mp.put(1, 1);
        vt.add(1);

        long ans = 0;
        int minLen;
        int node;
        for (int i = 0; i < n - 1; i++) { // 总共有n-1条边
            minLen = Integer.MAX_VALUE;
            node = -1;
            for (int cur : vt) { // 选择离选点最近的点
                for (int k = 1; k <= n; k++) { // 在 1 - n 中查找节点
                    if (mp.containsKey(k)) continue; // 跳过已选择的点
                    if (edge[cur][k] == -1) continue; // 无边
                    // 找到最小的边
                    if (edge[cur][k] < minLen) {
                        node = k;
                        minLen = edge[cur][k];
                    }
                }
            }
            ans += minLen;
            mp.put(node, 1); // 标记为已选择
            vt.add(node);
        }
        System.out.println(ans);
    }
}

相关文章

  • 老张的音乐路

    “董燕知道吗?” “嗨,你们懂什么,你们这些小子。” “那我和董燕可是有交情的。” 老张傍晚拾掇过菜园就在村口的小...

  • 60年没有说过一句“我爱你”

    她是老张家童养媳,他也是一路要饭被老张家收养,老张家正好膝下无子,虽然日子清苦,但是好歹有个家,老张家没有钱给他们...

  • 老张蹭茶

    繁花谢树的季节里,没有一丝冬残的意味,闲来无事,找老张蹭茶去。 老张的茶室位于平江路大儒巷,老张其实岁...

  • 鸟儿事

    老张爱鸟。 年轻时每次路过花鸟鱼市场,老张总爱去逛逛鸟市,渐渐的变成了经常性的“路过”,老张自己也爱上了这样的“路...

  • 鸟事

    老张爱鸟。 年轻时每次路过花鸟鱼市场,老张总爱去逛逛鸟市,渐渐的变成了经常性的“路过”,老张自己也爱上了这样的“路...

  • 140字微小说|老张赶场

    老张骑摩托车载老婆赶场。 村里的路坑坑洼洼,弯还多。 摩托车一发动,老张轰油门,松离合,呼啸而去。 老张老婆随着惯...

  • 老张 老张

    李老师和张老师两口子住在我们楼上,我们二楼,他们在十二楼。他俩都七十多岁了,都是 退休教师。人很和善。 张老师是教...

  • 老张,老张

    村里的人都喜欢叫他老张,原名叫张三风,偶尔听别人叫起这个名字还挺别扭,熟悉他的人常...

  • 老张,老张

    1 敲下这个题目的时候,不由得就笑了,不知道老张跟别人自我介绍的时候会怎么讲,会不会说,“鄙姓张,弓长张的张。请多...

  • 老房子

    老张和张老太今年81岁,两人在同一年出生,老张比张老太大两个月,张老太走起路来有些困难,老张腿脚好些,不但能走,而...

网友评论

      本文标题:老张的路

      本文链接:https://www.haomeiwen.com/subject/dliznrtx.html