Expm 4_2 有向无环图中的最短路径问题
【问题描述】
建立一个从源点S到终点E的有向无环图,设计一个动态规划算法求出从S到E的最短路径值,并输出相应的最短路径。

解:

package org.xiu68.exp.exp4; import java.util.ArrayDeque;
import java.util.Stack; public class Exp4_2 {
//建立一个从源点S到终点E的有向无环图,设计一个动态规划算法求出从S到E的最短路径值,并输出相应的最短路径。
public static void main(String[] args) {
int m=Integer.MAX_VALUE;
int[][] edges=new int[][]{
{m,1,m,2,m,m},
{m,m,6,m,m,m},
{m,m,m,m,1,2},
{m,4,m,m,3,m},
{m,m,m,m,m,1},
{m,m,m,m,m,m}
};
MGraph1 m1=new MGraph1(edges);
m1.minPath(0, 5);
//输出
// 0 to 5 is 6
// the path is:0-->3-->4-->5 }
} class MGraph1{
private int[][] edges; //有向无环图
private int vexNum; //顶点数量 public MGraph1(int[][] edges){
this.edges=edges;
this.vexNum=edges.length;
} public void minPath(int start,int end){ int[] dist=new int[vexNum]; //源点到该点的最短路径
for(int i=0;i<vexNum;i++)
dist[i]=Integer.MAX_VALUE;
dist[start]=0; int[] pre=new int[vexNum]; //最短路径中该点的前一个顶点
pre[start]=-1; Stack<Integer> queue=new Stack<>(); //存放拓扑排序序列
topoSort(queue); while(!queue.isEmpty()){
int j=queue.pop(); for(int i=0;i<vexNum;i++){
if(edges[i][j]!=Integer.MAX_VALUE && dist[j]>dist[i]+edges[i][j]){
dist[j]=dist[i]+edges[i][j];
pre[j]=i;
}
}//for
}//while //打印最短路径
System.out.println(start+" to "+end+" is "+dist[end]); String path=""+end;
int preVex=pre[end]; while(preVex!=-1){
path=preVex+"-->"+path;
preVex=pre[preVex];
}
System.out.println("the path is:"+path); } //拓扑排序
public void topoSort(Stack<Integer> queue){
boolean[] visited=new boolean[vexNum];
for(int i=0;i<vexNum;i++){
if(!visited[i])
dfs(queue,i,visited);
}
} //利用深度优先搜索进行拓扑排序
public void dfs(Stack<Integer> queue,int v,boolean[] visited){
visited[v]=true;
for(int i=0;i<vexNum;i++){
if(edges[v][i]!=Integer.MAX_VALUE && !visited[i])
dfs(queue,i,visited);
}
queue.push(v);
}
}
Expm 4_2 有向无环图中的最短路径问题的更多相关文章
- javascript实现有向无环图中任意两点最短路径的dijistra算法
有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...
- pagerank算法在数学模型中的运用(有向无环图中节点排序)
一.模型介绍 pagerank算法主要是根据网页中被链接数用来给网页进行重要性排名. 1.1模型解释 模型核心: a. 如果多个网页指向某个网页A,则网页A的排名较高. b. 如果排名高A的网页指向某 ...
- JavaScript + SVG实现Web前端WorkFlow工作流DAG有向无环图
一.效果图展示及说明 (图一) (图二) 附注说明: 1. 图例都是DAG有向无环图的展现效果.两张图的区别为第二张图包含了多个分段关系.放置展示图片效果主要是为了说明该例子支持多段关系的展现(当前也 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- select 函数实现 三种拓扑结构 n个客户端的异步通信 (完全图+线性链表+无环图)
一.这里只介绍简单的三个客户端异步通信(完全图拓扑结构) //建立管道 mkfifo open顺序: cl1 读 , cl2 cl3 向 cl1写 cl2 读 , cl1 cl3 向 cl2写 cl3 ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- c/c++ 有向无环图 directed acycline graph
c/c++ 有向无环图 directed acycline graph 概念: 图中点与点之间的线是有方向的,图中不存在环.用邻接表的方式,实现的图. 名词: 顶点的入度:到这个顶点的线的数量. 顶点 ...
- 图->有向无环图->求关键路径
文字描述 与AOV-网相对应的是AOE-网(Activity on Edge)即边表示活动的网.AOE-网是一个带权的有向无环图.其中,顶点表示事件Event,弧表示活动,权表示活动持续的时间.通常, ...
- 图->有向无环图->拓扑排序
文字描述 关于有向无环图的基础定义: 一个无环的有向图称为有向无环图,简称DAG图(directed acycline graph).DAG图是一类较有向树更一般的特殊有向图. 举个例子说明有向无环图 ...
随机推荐
- Android: 网络随时需要在3G和Wifi切换,网络程序需要注意
平时,3G和WIFI 都开着的时候,Android默认使用Wifi,但现实环境中不可能到处都有wifi,所以手机会经常自动切换网络. 有的时候,手机一开始使用wifi上网,当进入待机后10-30分钟, ...
- ElasticSearch集群介绍二
ElasticSearch集群 一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力. ...
- 数据分析工具urule
Python统计学书籍 https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-13911786811.22.6431353b4F5iw1& ...
- Jenkins自动发布代码实战篇
Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...
- H3C常用命令详解
H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...
- 1、JDBC-Connection
新建Maven工程 pom.xml <dependencies> <dependency> <groupId>mysql</groupId> <a ...
- VS Code 扩展程序
1. Auto Rename Tag:自动重命名成对的 html 标签.假如你创建了一个<a>标签,现在想更改它,那么只要更改前面的标签后面与之成对的标签也会自动修改为匹配的标签. 2. ...
- C# 多线程辅助类实现多任务
1)首先实现一个多线程的辅助类,代码如下: public class ThreadMulti { public delegate void DelegateComplete(); public del ...
- 运用Zabbix实现内网服务器状态及局域网状况监控(2) —— 环境配置
一.基本要求 Zabbix支持如下操作系统: LinuxIBM AIXFreeBSDNetBSDOpenBSDHP-UXMac OS XSolarisWindows: 2000, Server 200 ...
- Codeforces 590D Top Secret Task
D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...