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

在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算法的应用).._第十二次作业的更多相关文章
- Ex3_28 在2SAT问题中,给定一个字句的集合..._第十二次作业
参考答案 ----------------------------------------------------------------------------------------------- ...
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...
- 有向图强连通分量的Tarjan算法和Kosaraju算法
[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...
- 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法
Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...
- 给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后。 要求:空间复杂度是O(1),且只能遍历一次字符串。
题目:给定一个字符串里面只有"R" "G" "B" 三个字符,请排序,最终结果的顺序是R在前 G中 B在后. 要求:空间复杂度是O(1),且 ...
- 给定一个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]} ...
- 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?
如果说: 给定一个号码与通配符问号W,问号代表一个随机数字. 给定的整数,得到X,和W它具有相同的长度. 问:多少整数协议W的形式和的比率X大? 进格公式 数据的多组,两排各数据的,W,第二行是X.它 ...
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 给定一个公式字符串用java进行拆解并计算结果
需求很简单,给定一个字符串形式的公式规则,用java代码进行拆解,并能计算出结果. ♦考虑字符串中数字格式[整数.小数点] ♦考虑字符串中运算符[+-*/()] ♦考虑空格.运算规则[被0除] 以下是 ...
随机推荐
- jsp使用cookie自动登录
Login.jsp <%@ page language="java" import="java.util.*" pageEncoding="ut ...
- TCP回射服务器修订版(ubuntu 18.04)
一.需求 把https://www.cnblogs.com/soldierback/p/10673345.html中的TCP回射服务器程序重写成使用select来处理任意个客户的单进程 程序,而不是为 ...
- verilog仿真文件编写
verilog仿真文件大概框架: ·timescale 1ns/1ps //但需要时间 module xxx_tb(); //仿真文件不需要输入和输出, intput clk; ] xx; //根据需 ...
- spring boot2 整合(一)Mybatis (特别完整!)
大概介绍下流程: 借助idea实现mybatis逆向工程 用xml配置实现整合 用cmd命令行实现mybatis逆向工程 用mapping.xml配置实现数据交互 用注解的方式实现数据交互 首先我的开 ...
- C++ 类2
继承: 联系一起的类有层次关系. 基类: 层次关系的根部 派生类: 基类负责定义在层次关系中所以类共同拥有的成员,派生类定义其各种特有的成员. 基类类型相关的函数, 派生类不做改变直接继承的函数 某些 ...
- transition的属性变化
链接:https://www.cnblogs.com/yehui-mmd/p/5934157.html css3——transition属性和opacity属性 [transition-durat ...
- Ubuntu18.04下Python Web环境搭建
Python3的安装与卸载 pip, pip3的安装 Django2.x的安装 mysql的安装及命令行工具mycli的安装 virtualenv及virtualenvwrapper的安装 IPyth ...
- Git配置信息相关命令
查看git所有配置项 $ git config -l or $ git config --list 全局配置用户名邮箱 $ git config --global user.name "yo ...
- ue4 Skeletal Mesh编辑器
skeletal mesh:骨骼网络物体资源 由 美术制作(*.fbx). 在ue4可对此资源进行编辑以添加一些游戏需要的设置. https://docs.unrealengine.com/lates ...
- python常用模块之os模块
全部参考~~~~~~~ 1. 解释说明版:https://www.cnblogs.com/yufeihlf/p/6179547.html 2. 简洁版: https://www.cnblogs.com ...