在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. 无法定位程序输入点 InitializeCriticalSectionEx、GetTickCount64

    (1)方法一:在vc项目中把对应的方法名改为 InitializeCriticalSection.GetTickCount. (2)方法二:添加如下定义#define WINVER           ...

  2. Select 子句后的别名,在where条件中不能使用

    SELECT * FROM student WHERE (条件) 执行顺序,先执行FROM 子句,然后执行WHERE 子句,最后执行SELECT 所以Select 子句后的别名,在where条件中不能 ...

  3. (9)EvenOddJump

    一.问题描述 一只青蛙从数组(A)的每一个元素向数组尾部跳动.跳动规则如下: 当奇数跳的时候,就是第1.3.5.7....次进行移动时候,移动规则A[i] <= A[j],  并且A[j] = ...

  4. Oracle 数据库监听配置和服务

    -- 补充说明 如果要远程连接192.168.10.44上的oracle,那么192.168.10.44服务器必须启动TNSListener.(配置文件 listener.ora) PLSQL Dev ...

  5. Linux 文件大小查找排序

    du -sh 文件大小查询: 1.当前目录的大小: du -sh | sort 2.当前 目录下的文件大小: ls -lsh 3.当前目录 下的文件大小排序: du -sh * |sort -n 4. ...

  6. 数据库设计理论与实践·<三>物理设计

    一.物理设计核心任务与关键细节 二.物理设计经验之谈 1.数据类型的设计:建议字段数据类型定义时结合以下几点(以MYSQL为例) 1)不适用image,而使用varbinary等 2)不使用text和 ...

  7. 第27月第12天 webrtc ios openssl boost

    1. source 'https://github.com/CocoaPods/Specs.git' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pla ...

  8. 导弹拦截 dp

    n∗lognn*lognn∗logn写法,lis[i]的意义为:所有最长上升子序列长度为i的位置上的最小a数组元素值lis[i]的意义为:所有最长上升子序列长度为i的位置上的最小a数组元素值lis[i ...

  9. java.lang.Enum

    参考博客链接 java枚举类型的优势在哪里? Java 枚举(enum) 详解7种常见的用法

  10. typecho只能打开主页,文章详细内容打不开

    安装环境: nginx+linux 问题描述: 安装了typecho显示成功安装,但是前端只显示标题和摘要,点击查看不了详细内容. 问题原因: PHP这块不支持pathinfo, 官网提供的解决方案有 ...