Expm 10_1 带负权值边的有向图中的最短路径问题
【问题描述】
对于一个带负权值边的有向图,实现Bellman-Ford算法,求出从指定顶点s到其余顶点的最短路径,并判断图中是否存在负环。
 package org.xiu68.exp.exp10;
 public class Exp10_1 {
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         int[][] edges=new int[][]{
             {0,10,0,4,1},
             {0,0,0,0,0},
             {0,-10,0,0,0},
             {0,0,0,0,0},
             {0,0,2,0,0}
         };
         MGraph m1=new MGraph(edges);
         System.out.println(m1.bellmanFord(0));
     }
 }
 class MGraph{
     private int[][] edges;        //有向图边集
     private int vexNum;            //顶点数目
     private int[] dist;            //源点到该顶点的距离
     private int maxDistant;        //表示距离无穷远
     public MGraph(int[][] edges){
         this.edges=edges;
         this.vexNum=edges.length;
         this.dist=new int[vexNum];
         this.maxDistant=1000000;
     }
     public boolean bellmanFord(int start){
         //初始化dist数组
         for(int i=0;i<vexNum;i++){
                 dist[i]=maxDistant;
         }
         dist[start]=0;
         for(int i=0;i<vexNum-1;i++){            //从源点到任何一个顶点的最短路径最多有n-1条边
             boolean flag=false;                    //记录在本次循环中从源点到某个顶点是否有更短的路径
             //遍历所有的边
             for(int j=0;j<vexNum;j++){
                 for(int k=0;k<vexNum;k++){
                     if(edges[j][k]!=0 && dist[k]>dist[j]+edges[j][k]){
                         dist[k]=dist[j]+edges[j][k];
                         flag=true;
                     }
                 }
             }
             if(flag==false)        //已经求得所有顶点的最短路径
                 break;
         }
         //本次循环检测是否有负环存在
         //从源点到某个顶点有n条边,且路径更短,说明有负环存在
         for(int i=0;i<vexNum;i++){
             for(int j=0;j<vexNum;j++){
                 if(edges[i][j]!=0 && dist[j]>dist[i]+edges[i][j])
                     return false;
             }
         }
         for(int i=0;i<vexNum;i++)
             System.out.println(i+":"+dist[i]);
         return true;
     }
 }
Expm 10_1 带负权值边的有向图中的最短路径问题的更多相关文章
- 图之单源Dijkstra算法、带负权值最短路径算法
		
1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...
 - poj 3259 Wormholes 判断负权值回路
		
Wormholes Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java ...
 - 非负权值有向图上的单源最短路径算法之Dijkstra算法
		
问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...
 - Wormholes 最短路判断有无负权值
		
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
 - SPFA 最短路 带负权边的----  粗了解
		
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 算法大致流程是用一个队列来进行维护. 初始时将源加入队列 ...
 - hdu 6201 transaction (最短路变形——带负权最长路)
		
题意: 给定n个城市的货物买卖价格, 然后给定n-1条道路,每条路有不同的路费, 求出从某两个城市买卖一次的最大利润. 利润 = 卖价 - (买价 + 路费) 样例数据, 最近是从第一个点买入, 第4 ...
 - SPFA 求带负权的单源最短路
		
int spfa_bfs(int s) { ///s表示起点. queue <int> q; memset(d,0x3f,sizeof(d)); ///d数组中存下的就是最短路径(存在的话 ...
 - HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
		
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
 - Dijkstra算法为什么权值不能为负
		
Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记 ...
 
随机推荐
- Date类、SimpleDateFormat类
			
Date 构造方法: 1.无参数构造方法: Date date = new Date(); System.out.println(date);// Thu Mar 28 16:28:40 CST 20 ...
 - ueditor 百度编辑器 粘贴的table表格样式边线
			
粘贴html的table表格会有间隔大,黑色边线,可以在: ueditor.all.js 里 找到以下处,修改里面的样式即可 me.ready(function () { utils.cssRule( ...
 - JS创建对象之工厂模式
			
function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = jo ...
 - lua基于oopclass的属性节点类 和 集合类
			
--[[---------------------------------------------------------------------------- --@ Descrption: 属性节 ...
 - 关于TCP/IOCP构架中出现的Socket假死连接解决方案
			
如果在2台不同的公网机器,对TCP的c/s做过详细的压力测试,那么很不幸,会有很多人发现自己的server端会出现大量的假死连接. 假死连接具体表现如下: 1.在s端机器上,会有一些处于TCP_EST ...
 - luogu P3245 [HNOI2016]大数
			
传送门 \(HNOI2019\)前最后一题了qwq 这题要分情况,如果\(p=2\)或\(5\),那么只要区间内最后一个数字是\(p\)的倍数就好了,这个可以莫队,也有更优秀的做法.莫队做法可以看代码 ...
 - org.apache.flume.conf.ConfigurationException: Channel c1 not in active set.
			
1 错误详细信息 WARN conf.FlumeConfiguration: Could not configure sink k1 due to: Channel c1 not in active ...
 - 关于reduce的参数问题
			
ECMAScript 5还新增了两个缩小数组的方法: reduce() 和 reduceRight() .这两个方法都会迭代数组的所有项,然后构建一个最终返回的值.其中, reduce() 方法从数组 ...
 - tomat startup.bat 日志乱码问题解决
			
1.修改conf 下的logging.properties java.util.logging.ConsoleHandle.encoding=GBK C:\Users\Administrator> ...
 - python numpy 三行代码打乱训练数据
			
今天发现一个用 numpy 随机化数组的技巧. 需求 我有两个数组( ndarray ):train_datasets 和 train_labels.其中,train_datasets 的每一行和 t ...