java模板系列之spfa

阅读: 评论:0

java模板系列之spfa

java模板系列之spfa

最优情况下,时间复杂度是km,k是一个很小的常数,不过现在的出题人,都喜欢随手卡spfa,时间复杂度最差会到nm

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//import java.util.*;public class Main {static List<v> 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) { = to;this.val = val;}}static void spfa(){Arrays.fill(d,1000000009);Arrays.fill(v,false);Arrays.fill(num,0);Queue<Integer> q = new ArrayDeque<Integer>();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<a[x].size();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 = Int();m = Int();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<v>();}for(int i=0;i<m;i++){int from,to,val;from = Int();to = Int();val = Int();a[from].add(new v(to,val));a[to].add(new v(from,val));}spfa();System.out.println(d[n]);}}}

本文发布于:2024-02-01 18:53:35,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678481738736.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模板   系列之   java   spfa
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23