- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四 分支限界法实现单源最短路径
实验四 分支限界法实现单源最短路径
09电信实验班 徐振飞
实验名称
实现书本P194页所描述的单源最短路径问题
实验目的
掌握并运用分支限界法基本思想
运用分支限界法实现单源最短路径问题
区分分支限界算法与回溯算法的区别,加深对分支限界法理解
实验内容和原理
(1)实验原理
解单源最短路径问题的优先队列式分支限界法用一极小堆(本次实验我采用java.util包中的优先队列类PriorityQueue来实现)来存储活结点表。其优先级是结点所对应的当前路长。算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。这个结点的扩展过程一直继续到活结点优先队列为空时为止。
实验内容
测试用例:
源程序
import java.util.*;
public class ShortestPath
{
private int n;
private double matrix[][] = null;
private double minpath[];
public ShortestPath(int n)
{
this.n = n;
matrix = new double[n+1][n+1];
minpath = new double[n+1];
for(int i=1;i=n;i++)
{
minpath[i] = Double.MAX_VALUE;
}
//初始化图
getGraphMatrix();
}
public void getGraphMatrix()
{
//初始化为不能连通
for(int i=1;i=n;i++)
{
for(int j=1;j=n;j++)
{
matrix[i][j] = Double.MAX_VALUE;
}
}
System.out.println(请输入边总数:);
Scanner scan = new Scanner(System.in);
int m = scan.nextInt();
System.out.println(依次输入两个顶点号(1~+n+)和边长:例如 1 2 3);
for(int i=0;im;i++)
{
int a,b;
double d;
a = scan.nextInt();
b = scan.nextInt();
d = scan.nextDouble();
if(a1 || b1)
{
i--;
System.out.println(顶点号不能小于1);
continue;
}
if(an||bn)
{
i--;
System.out.println(顶点号不能大于+n);
continue;
}
matrix[a][b] = d;
}
}
/**
*@param 求以第i个节点为起点的单源最短路径
*/
public void shortpath(int i)
{
minpath[i] = 0;
double curlen = 0;
文档评论(0)