栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java模板系列之spfa-hdu2544

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java模板系列之spfa-hdu2544

最优情况下,时间复杂度是km,k是一个很小的常数,不过现在的出题人,都喜欢随手卡spfa,时间复杂度最差会到nm
https://vjudge.net/problem/HDU-2544

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

import java.util.*;

public class Main {

    static List a[];
    static int n,m;
    static int d[];
    static boolean v[];
    static int num[];

    static class v{
        int to,val;

        public v(int to, int val) {
            this.to = to;
            this.val = val;
        }
    }

    static void spfa(){
        Arrays.fill(d,1000000009);
        Arrays.fill(v,false);
        Arrays.fill(num,0);
        Queue q = new ArrayDeque();
        d[1] = 0;
        v[1] = true;
        q.add(1);
        while(q.size()!=0){
            int x = q.poll();
            v[x] = false;
            for(int i=0;i
                int newto = a[x].get(i).to;
                int newval = a[x].get(i).val;
                if(d[newto]>d[x]+newval){
                    d[newto]=d[x]+newval;
                    if(!v[newto]){
                        q.add(newto);
                        v[newto] = true;
                    }
                    num[newto]++;
                    if(num[newto]>=n){
                        System.out.println("负环");
                    }
                }
            }
        }

    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while(input.hasNext()){
            n = input.nextInt();
            m = input.nextInt();
            d = new int[n+1];
            v = new boolean[n+1];
            num = new int[n+1];
            if(n == 0 && m == 0){
                break;
            }
            a = new List[n+1];
            for(int i=1;i<=n;i++){
                a[i] = new ArrayList();
            }
            for(int i=0;i
                int from,to,val;
                from = input.nextInt();
                to = input.nextInt();
                val = input.nextInt();
                a[from].add(new v(to,val));
                a[to].add(new v(from,val));
            }
            spfa();
            System.out.println(d[n]);
        }
    }




}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878579.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号