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内某点(记 ...
随机推荐
- fastJson--json与java格式的转换
fastJson--json与java格式的转换: /* * alibaba提供的fastJson:用法: */ @Test public void testJson() { User user = ...
- WCF各个Service之间共享数据
为了实现cache存储验证用户身份信息,减少通过数据库验证的次数,需要在wcf各个服务之间建立共享数据区. namespace WcfService1 { public static clas ...
- position:fixed 失效
如果position:fixed 失效,那应该是你设置position的元素的父元素中有设置了transform属性哦 . 把 transform删除或设置为none就可以解决啦. 但是如果trans ...
- 在PHP中使用CURL,“撩”服务器只需几行
在PHP中使用CURL,“撩”服务器只需几行https://segmentfault.com/a/1190000006220620 七夕啦,作为开发,妹子没得撩就“撩”下服务器吧,妹子有得撩的同学那就 ...
- CF809C Find a car
传送门 luogu 其实这题的某个位置\((i,j)\)的数是\((i-1)\mathrm{xor}(j-1)+1\) 首先一个矩形的答案可以拆成\((x2,y2)-(x1-1,y2)-(x2,y1- ...
- steps/train_mono.sh
<<单音素HMM的训练流程图.vsdx>> 定义拓扑结构.参数初始化 $ gmm-init-mono --shared-phones=$lang/phones/sets.int ...
- 对Tomcat部署web应用的方式总结
对Tomcat部署web应用的方式总结,常见的有以下四种: 1.[使用控制台部署] 访问Http://localhost:8080,并通过Tomcat Manager登录,进入部署界面即可. 2.[利 ...
- mfc调用WPFDLL
1.修改MFC项目属性支持CLR 2.打开vcxproj,修改<PropertyGroup Label="Globals"> <PropertyGroup Lab ...
- AMD/CMD/CommonJs到底是什么?它们有什么区别?
知识点1:AMD/CMD/CommonJs是JS模块化开发的标准,目前对应的实现是RequireJs/SeaJs/nodeJs. 知识点2:CommonJs主要针对服务端,AMD/CMD主要针对浏 ...
- day 4 - 1 列表
1.列表的增删改查 1) append insert extend li = ["ysg",[1,2,3,4,5],"peipei","梦幻" ...