算法java实现--分支限界法--单源最短路径问题
来源:互联网 发布:mac 自动字幕的播放器 编辑:程序博客网 时间:2024/05/17 22:18
单源最短路径问题的java实现(分支限界法)
具体问题描述以及C/C++实现参见网址
http://blog.csdn.net/liufeng_king/article/details/8900872
import java.util.Collections;import java.util.LinkedList;import java.util.Scanner;/** * 单源最短路径问题--分支限界法 * @author Lican * */public class BBShortest {public static class Heapnode implements Comparable{int id;//顶点编号float length;//当前路长public Heapnode(int ii,float ll){id=ii;length=ll;}@Overridepublic int compareTo(Object x) {float xl=((Heapnode)x).length;if(length<xl) return -1;if(length==xl) return 0;return 1;}}public static void shortest(float[][] a,int v,float[] dist,int[] p){//dist[j]保存从源到顶点j的距离;p[j]记录从源到顶点j的路径上的前驱顶点int n=p.length-1;LinkedList<Heapnode> nodes=new LinkedList<Heapnode>();//用LinkedList存储最小堆Heapnode enode=new Heapnode(v,0);for(int j=1;j<=n;j++){dist[j]=Float.MAX_VALUE;}while(true){//搜索问题解空间for(int j=1;j<=n;j++){if(a[enode.id][j]!=-1&&enode.length+a[enode.id][j]<dist[j]){//顶点i到j可达,同时长度小于dist[j]dist[j]=enode.length+a[enode.id][j];p[j]=enode.id;Heapnode e=new Heapnode(j,dist[j]);nodes.add(e);Collections.sort(nodes);}}//取下一个扩展结点if(nodes.isEmpty())break;else{enode=(Heapnode) nodes.poll();}}for(int i=2;i<=n;i++){System.out.println(i+"节点的最短距离是:"+dist[i]+";前驱点是:"+p[i]);}}public static void main(String[] args) {System.out.println("请输入图顶点的个数:");Scanner sc = new Scanner(System.in);String line = sc.nextLine();int n = Integer.parseInt(line);System.out.println("请输入图的路径长度:");float[][] a = new float[n+1][n+1];//下标从1开始,以下都是float[] dist = new float[n+1]; int[] prev = new int[n+1];for(int i=0;i<n;i++){line = sc.nextLine();String[] ds = line.split(",");for(int j = 0;j<ds.length;j++){a[i+1][j+1]=Float.parseFloat(ds[j]);}}int v =1;//顶点从1开始shortest(a,v,dist,prev);}}/** * 以下为输入输出 * * 输入: 5-1,10,-1,30,100-1,-1,50,-1,-1-1,-1,-1,-1,10-1,-1,20,-1,60-1,-1,-1,-1,-1* 输出:2节点的最短距离是:10.0;前驱点是:13节点的最短距离是:50.0;前驱点是:44节点的最短距离是:30.0;前驱点是:15节点的最短距离是:60.0;前驱点是:3*/
0 0
- 算法java实现--分支限界法--单源最短路径问题
- 0033算法笔记——【分支限界法】分支限界法与单源最短路径问题
- 0033算法笔记——【分支限界法】分支限界法与单源最短路径问题
- 算法java实现--分支限界法--最优装载问题
- 算法java实现--分支限界法--布线问题
- 算法java实现--分支限界法--0-1背包问题
- 算法java实现--分支限界法--最大团问题
- 算法java实现--分支限界法--旅行售货员问题
- 算法java实现--分支限界法--电路板排线问题
- 算法java实现--分支限界法--批处理作业调度问题
- 单源最短路径分支限界法之java实现
- 单源最短路径问题(分支限界法)
- 装载问题的分支限界算法实现
- 单源最短路径分支限界法之C++实现
- Java语言描述:分支限界法之单源最短路径问题(全网独家)
- 商旅问题的分支限界法 java语言实现
- 分支限界法之单源最短路径
- 单源最短路径_分支限界法
- QString的一些用法总结(1 section, split 函数)
- 怎样通过远程桌面将文件上传到服务器
- js学习小结(十二)2014.5.20(遍历dom)
- mysql 命令
- C++编程故障处理——实参不依赖模板参数
- 算法java实现--分支限界法--单源最短路径问题
- 用List传递学生信息
- GBS服装分床省料软件操作说明书
- ORA-12170: TNS:Connect timeout occurred ORA-06512: at "SYS.DBMS_SNAPSHOT"
- Window 7下 MyEclipse SVN 更改帐号
- 修改cell的背景和背景图片
- 【搜索引擎Jediael开发笔记3】使用HtmlParser提取网页中的链接
- 【越狱开发】通过数据线连接使用ssh登陆到iOS 设备
- 算法导论 第四章矩阵乘法的Strassen算法