动态规划算法分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、实验结果显示
五、实验总结
通过理解最优子结构的性质和子问题重叠性质,在VC++6.0环境下实现动态规划算法。动态规划算法是由单阶段的决策最优逐步转化为多阶段的决策最优,最后构造一个最优解。经过反复的调试操作,程序运行才得出结果。
六、附录 A
#include
#include
#include
#include
#define MAX 100
#define n 12
#define k 5
int c[n][n];
void init(int cost[])
{
int i,j;
for(i=0;i<13;i++)
{
for(j=0;j<13;j++)
{
c[i][j]=MAX;
}
}
c[1][2]=9; c[1][3]=7;c[1][4]=3; c[1][5]=2;
c[2][6]=4; c[2][7]=2; c[2][8]=1;
c[3][6]=2; c[3][7]=7;
c[4][8]=11;
c[5][7]=11;c[5][8]=8;
c[6][9]=6; c[6][10]=5;
c[7][9]=4; c[7][10]=3;
c[8][10]=5;c[8][11]=6;
c[9][12]=4;
c[10][12]=2;
c[11][12]=5;
}
void fgraph(int cost[],int path[],int d[])
{
int r,j,temp,min;
for(j=0;j<=n;j++)
cost[j]=0;
for(j=n-1;j>=1;j--)
{
temp=0;
min=c[j][temp]+cost[temp];
for(r=0;r<=n;r++)
{
if(c[j][r]!=MAX)
{
if((c[j][r]+cost[r]) { min=c[j][r]+cost[r]; temp=r; } } } cost[j]=c[j][temp]+cost[temp]; d[j]=temp; } path[1]=1; path[k]=n; for(j=2;j path[j]=d[path[j-1]]; } void bgraph(int bcost[],int path1[],int d[]) { int r,j,temp,min; for(j=0;j<=n;j++) bcost[j]=0; for(j=2;j<=n;j++) { temp=12; min=c[temp][j]+bcost[temp]; for(r=0;r<=n;r++) { if(c[r][j]!=MAX) { if((c[r][j]+bcost[r]) { min=c[r][j]+bcost[r]; temp=r; } } } bcost[j]=c[temp][j]+bcost[temp]; d[j]=temp; } path1[1]=1; path1[k]=n; for(int i=4;i>=2;i--) { path1[i]=d[path1[i+1]]; } } void main() { int cur=-1; int cost[13],d[12],bcost[13]; int path[k]; int path1[k]; init(cost); fgraph(cost,path,d); cout<<"使用向前递推算法后的最短路径:\n\n"; for(int i=1;i<=5;i++) { cout< } cout<<"\n"; cout< cout<<"\n"; cout<<"\n使用向后递推算法后的最短路径:\n\n"; bgraph(bcost,path1,d); for(i=1;i<=5;i++) { cout< } cout<<"\n"; cout< cout<<"\n"; } 盛年不重来,一日难再晨。及时宜自勉,岁月不待人。