在bellman-ford算法中,循环n-1(n为顶点个数)次可以找出从源点到其他顶点的最多n-1条边的最短路径,若循环k次则可以找出从源点到其他顶点的最多k条边的最短路径。

 package org.xiu68.ch04.ex12;

 public class Ex4_10 {
public static void main(String[] args) {
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);
m1.bellmanFord(0,2);
}
} 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 void bellmanFord(int start,int edgeNum){
//初始化dist数组
for(int i=0;i<vexNum;i++){
dist[i]=maxDistant;
}
dist[start]=0; for(int i=0;i<edgeNum;i++){ //从源点到任何一个顶点的最多edgeNum条边的最短路径
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) //已经求得所有顶点最多edgeNum条边的最短路径
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]);
}
}

package org.xiu68.ch04.ex12; public class Ex4_10 {
public static void main(String[] args) {
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);
m1.bellmanFord(0,2);
}
} 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 void bellmanFord(int start,int edgeNum){
//初始化dist数组
for(int i=0;i<vexNum;i++){
dist[i]=maxDistant;
}
dist[start]=0; for(int i=0;i<edgeNum;i++){ //从源点到任何一个顶点的最多edgeNum条边的最短路径
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) //已经求得所有顶点最多edgeNum条边的最短路径
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]);
}
}

Ex 4_10 给定一个有向图G=(V,E),其中边...(bellman-ford算法的应用).._第十二次作业的更多相关文章

  1. Ex3_28 在2SAT问题中,给定一个字句的集合..._第十二次作业

    参考答案 ----------------------------------------------------------------------------------------------- ...

  2. [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.

    给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...

  3. 有向图强连通分量的Tarjan算法和Kosaraju算法

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...

  4. 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法

    Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...

  5. 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。

    题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...

  6. 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

    分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...

  7. 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?

    如果说: 给定一个号码与通配符问号W,问号代表一个随机数字. 给定的整数,得到X,和W它具有相同的长度. 问:多少整数协议W的形式和的比率X大? 进格公式 数据的多组,两排各数据的,W,第二行是X.它 ...

  8. 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  9. 给定一个公式字符串用java进行拆解并计算结果

    需求很简单,给定一个字符串形式的公式规则,用java代码进行拆解,并能计算出结果. ♦考虑字符串中数字格式[整数.小数点] ♦考虑字符串中运算符[+-*/()] ♦考虑空格.运算规则[被0除] 以下是 ...

随机推荐

  1. java操作数据库:增删改查

    不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...

  2. Mac 键盘符号 及VSCode快捷键 说明

    Mac 键盘符号说明 ⌘ == Command ⇧ == Shift ⇪ == Caps Lock ⌥ == Option ⌃ == Control ↩ == Return/Enter ⌫ == De ...

  3. 解决 Entity Framework 6.0 decimal 类型精度问题

    Ø  前言 本文主要解决 EF 中对于 MSSQL 数据库的 decimal 类型经度问题,经实验该问题仅在 CodeFirst 模式的情况下发生,话不多说直接看代码. 1.   假设我们有一张 Cu ...

  4. bzoj 3916 暴力哈希

    暴力的哈希,注意: 将一个串当作另一个串的前缀,需要乘上p[len],len=后面串的长度 这是自己的代码,拿数据在本地测A掉了,但是bz上wa了??bz换数据了难道?? #include<cs ...

  5. 【bzoj 2588】Spoj 10628. Count on a tree

    Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...

  6. 高并发秒杀系统--junit测试类与SpringIoc容器的整合

    1.原理是在Junit启动时加载SpringIoC容器 2.SpringIoC容器要根据Spring的配置文件加载 [示例代码] package org.azcode.dao; import org. ...

  7. 使用Hexo在github上搭建个人博客

    最近正好在学习前端开发,想着搭建一个属于自己的个人博客,把自己的技能树整理整理,温故而知新. 如果你有前端开发经验,那么搭建这样的博客就很简单了. 一 什么是Hexo     Hexo 是一个快速.简 ...

  8. ubuntu终端命令启动matlab方法

    让所有用户都有权限使用matlab,在终端输入 sudo gedit /etc/profile 在后行写 export MATLABPATH=/home/ubuntu/MATLAB/R2016b:$M ...

  9. 梯度下降算法对比(批量下降/随机下降/mini-batch)

    大规模机器学习: 线性回归的梯度下降算法:Batch gradient descent(每次更新使用全部的训练样本) 批量梯度下降算法(Batch gradient descent): 每计算一次梯度 ...

  10. mysql 5.7 ERROR 1054(42S22) Unknown column 'password' in ‘field list’ 报错

    mysql 忘记密码 报错?ERROR 1054(42S22) Unknown column 'password' in ‘field list’原因:5.7版本下的mysql数据库下已经没有pass ...