【问题描述】

对于一个带负权值边的有向图,实现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 带负权值边的有向图中的最短路径问题的更多相关文章

  1. 图之单源Dijkstra算法、带负权值最短路径算法

    1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...

  2. poj 3259 Wormholes 判断负权值回路

    Wormholes Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u   Java ...

  3. 非负权值有向图上的单源最短路径算法之Dijkstra算法

    问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...

  4. Wormholes 最短路判断有无负权值

    Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...

  5. SPFA 最短路 带负权边的---- 粗了解

    SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 算法大致流程是用一个队列来进行维护. 初始时将源加入队列 ...

  6. hdu 6201 transaction (最短路变形——带负权最长路)

    题意: 给定n个城市的货物买卖价格, 然后给定n-1条道路,每条路有不同的路费, 求出从某两个城市买卖一次的最大利润. 利润 = 卖价 - (买价 + 路费) 样例数据, 最近是从第一个点买入, 第4 ...

  7. SPFA 求带负权的单源最短路

    int spfa_bfs(int s) { ///s表示起点. queue <int> q; memset(d,0x3f,sizeof(d)); ///d数组中存下的就是最短路径(存在的话 ...

  8. HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)

    免费送气球 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  9. Dijkstra算法为什么权值不能为负

    Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记 ...

随机推荐

  1. 细说shiro之一:shiro简介

    官网:https://shiro.apache.org/ 一. Shiro是什么Shiro是一个Java平台的开源权限框架,用于认证和访问授权.具体来说,满足对如下元素的支持: 用户,角色,权限(仅仅 ...

  2. IScroll5要防止重复加载

    增加一个判断条件,ajax未返回前,设置为true,返回前设置为false,只有为false下才能够出发加载数据事件效果好很多.

  3. C# RichTextBox插入带颜色数据

    #region 日志记录.支持其他线程访问 public delegate void LogAppendDelegate(Color color, string text); public void ...

  4. 10.tesseract

    1.Tesseract-OCR简介  一个Google支持的开源的OCR图文识别开源项目.支持多种语言(我使用的是3.02 版本,支持包括英文,简体中文,繁体中文),支持Windows,Linux,M ...

  5. IT这条路,适合什么人走。

    今天 ,到图书馆Study,呼,不知道为撒,看到那么多新书,那么多新技术(也不能说是新技术,就是自己没有学习过的技术),特别兴奋,学习的疲劳顿时间就没了,感觉什么都想学,都想据为己有,但是...... ...

  6. C++ 函数的重载和参数默认值

    函数的重载和参数默认值视频教程 函数的重载注意事项: 只会根据三项内容进行重载:参数的个数.参数的类型.参数的顺序 参数默认值: 参数的默认值可以在函数的定义中也可以在函数的声明中,但不能同时有 从第 ...

  7. 修改输入框placeholder的样式

    1. h5页面: //修改placeholder 样式 (chrome,其余类似加前缀) ::-webkit-input-placeholder { color:rgba(21,30,38,0.35) ...

  8. PHP7语法知识(二):流程控制语句、函数、字符串、数组

    流程控制: 一.条件控制语句 1.if条件控制语句: 2.switch分支语句: 二.循环控制语句 1.while循环: 2.do while循环: 3.for循环: 4.foreach循环: 三.跳 ...

  9. linux 僵屍进程

    参考链接 :  http://soft.chinabyte.com/os/5/12172005.shtml

  10. mysql 案例 ~ 函数汇总

    一 简介:通过perf分析活跃的mysql系统函数 二 函数简介 1  buf_calc_page_new_checksum 作用 确认页是否损坏 在buf_calc_page_new_checksu ...