实验三动态规划求多段图问题
v[i]=length;
d[i]=temp;
}
path[0]=0;//起点
path[k-1]=n-1;//最后的目标
for(i=1;i<=k-2;i++) (path[i])=d[path[i-1]];//将最短路径存入数组中
}
void printpath()
{ int i;
for(i=0;i<k;i++)
int path[k]; //存储最短路径的数组
void creatgraph() //创建图的(成本)邻接矩阵
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&cost[i][j]);//获取成本矩阵数据
}
void printgraph() //输出图的成本矩阵
printf("%d ",path[i]);
}
int main()
{
creatgraph();
pri34;输出使用向前递推算法所得的最短路径:\n");
printpath();
printf("\n输出使用向后递推算法所得的最短路径:\n");
printpath();
实验三动态规划求多段图问题
实验项目算法实验动态规划实验
一、实验目的
1.掌握动态规划算法的基本思想
2.掌握多段图的动态规划算法
3.选择邻接表或邻接矩阵方式来存储图
4、分析算法求解的复杂度。
二、实验内容
4.掌握动态规划算法的基本思想
5.掌握多段图的动态规划算法
6.选择邻接表或邻接矩阵方式来存储图
4、分析算法求解的复杂度。
{ int i,j;
printf("成本矩阵:\n");
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%d ",cost[i][j]);
printf("\n");
}
}
//使用向前递推算法求多段图的最短路径
void FrontPath()
{ int i,j,length,temp,v[n],d[n];
三、实验环境
程序设计语言:c++
编程工具:microsoft visual studio 2010
四、算法描述和程序代码
#include "stdio.h"
#define n 7 //图的顶点数
#define k 4 //图的段数
#define MAX 23767
int cost[n][n]; //成本值数组
printf("\n");
return 0;
}
五、实验结果截图
六、实验总结
在做实验的过程中,要按部就班,首先明确实验目的,然后进行分析,写算法程序,最后调试运行,不能粗枝大叶,做的过程要细心谨慎,自己不会的通过向别人请教,总之上机实践的过程会学到很多。
for(i=0;i<n;i++) v[i]=0;
for(i=n-2;i>=0;i--)
{ for(length=MAX,j=i+1;j<=n-1;j++)
if(cost[i][j]>0 && (cost[i][j])+v[j]<length)
{length=cost[i][j]+v[j]; temp=j;}