用动态规划法实现有向图的最短路径问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态规划法实现有向图的最短路径实验

实验题目:

设计一个求解有向图,单源最短路径的算法

实验目的:

1)了解,并掌握分支限界算法思想

2)会编写常见算法。

实验要求:

1.编写实验代码

2.分析算法时间和空间复杂度

实验主要步骤:

1 算法代码

package suanfa;

publicclass ShortPath{

privatestatic Integer M = Integer.MAX_VALUE;

publicstaticvoid main(String[]args){

int[][]c={{M,4,2,3,M,M,M,M,M,M},

{M,M,M,M,9,8,M,M,M,M},

{M,M,M,M,6,7,8,M,M,M},

{M,M,M,M,M,4,7,M,M,M},

{M,M,M,M,M,M,M,5,6,M},

{M,M,M,M,M,M,M,8,6,M},

{M,M,M,M,M,M,M,6,5,M},

{M,M,M,M,M,M,M,M,M,7},

{M,M,M,M,M,M,M,M,M,3},

{M,M,M,M,M,M,M,M,M,M}};

shortPath(10,c);

}

publicstaticvoid shortPath(int n,int[][]c){

int[] cost=newint[n];//cost[i]存储i到n-1的子问题的最短路径值

int[] path=newint[n];//path[i]存储状态,使cij+cost[i]最小的j值

//对数组cost[n]和path[n]进行初始化

for(int i=0;i

cost[i]=M;

path[i]=-1;

}

cost[9]=0;

for(int i=n-2;i>=0;i--){

for(int j=n-1;j>=i;j--){

//得到i的邻接点

if(c[i][j](c[i][j]+cost[j])){

cost[i]=c[i][j]+cost[j];

path[i]=j;

}

}

}

System.out.println("最短路径长度为:"+cost[0]);

System.out.print("最短路径为:");

int i=0;

System.out.print("0");

while(i!=n-1){

System.out.print("-->"+path[i]);

i=path[i];

}

}

}

2 程序运行结果

4 算法复杂度分析

设节点个数为n个

算法的循环的次数为n*n次,算法的时间复杂度为O(n^2)

算法需要保存一个矩阵,故算法的空间复杂度为O(n^2)

相关文档
最新文档