Expm 4_2 有向无环图中的最短路径问题
2024-10-14 20:47:56
【问题描述】
建立一个从源点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);
}
}
最新文章
- apache服务器启动时提示httpd: apr_sockaddr_info_get() failed for
- js isArray
- 二叉树节点个数题目[n0,n1,n2]
- TPatch动态补丁系统(iOS)
- ajax 城市区域选择三级联动
- [iOS]解决模拟器无法输入中文问题
- <;s:iterator>;<;/s:iterator>;循环指定输出,(status的方法使用)
- MySql5.1在Win7下的安装与重装问题的解决
- Vim应用
- JavaScript 实现Map
- 在 go/golang语言中使用 google Protocol Buffer
- tooltip 鼠标移动上去出现图片或文字与title大同小异
- 837B. Balanced Substring
- RedHat Enterprise Linux 6.4使用yum安装出现This system is not registered to Red Hat Subscription Management
- AtCoder arc061C Snuke&#39;s Subway Trip
- 【第一部分】07Leetcode刷题
- centos7 下通过yum安装JDK
- poj 2387——单源最短路权值大于0
- UI自动化环境准备
- java 继承多态的一些理解和不理解