算法实验 动态规划上机

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

实验3动态规划上机

[实验目的]

1.掌握动态规划的基本思想和效率分析方法;

2.掌握使用动态规划算法的基本步骤;

3.学会利用动态规划解决实际问题。

[实验要求]

按以下实验内容完成题目,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。

[实验学时] 2学时。

[实验内容]

一、实验内容

利用动态规划算法编程求解多段图问题,要求读入多段图,考虑多段图的排序方式,求源点到汇点的最小成本路径。并请对自己的程序进行复杂性分析。

二、算法描述

先输入点的个数和路径数以及每段路径的起点、长度、终点,再计算所有路径的值大小,比较输出后最小值。

三、源程序

#define N 2147483647

#include

#include

void main()

{

int i,pointnum,j;

cout<<"输入图中点的个数:"<

cin>>pointnum;

int **array; //array数组描述多段图

int *array2; //array2记录距离起点的最小路径

int *array3; //array3记录上一点编号

array=new int*[pointnum];

array2=new int[pointnum+1];

array3=new int[pointnum+1];

for(i=0;i

{

array[i]=new int[pointnum];

array2[i]=N;

array3[i]=N;

}

array2[pointnum]=N;

array3[pointnum]=N;

for(i=0;i

{

for(j=0;j

{

array[i][j]=N;

}

}

cout<<"输入多段图中路径条数"<

int pathnum;

cin>>pathnum;

int a,k;

cout<<"依次输入图中每段路径"<

array2[1]=0;

array3[1]=0;

for(k=0;k

{

cin>>i;

cin>>a;

cin>>j;

array[i][j]=a;

if(array2[j]>(a+array2[i]))

{

array3[j]=i;

array2[j]=a+array2[i];

}

// cout<

}

k=0;

i=pointnum;

for(;;)

{

if(array3[i]!=0)

{

k++;

i=array3[i];

}

else

break;

}

// cout<

int *array4;

array4=new int[k+1];

i=pointnum;

for(j=k;j>=0;j--)

{

array4[j]=i;

i=array3[i];

if(i==0)

break;

}

i=pointnum;

cout<

cout<

for(j=0;j<=k;j++)

{

cout<

}

cout<<"]"<

}

四、程序的复杂度分析

O(n)= n²=16

五、程序运行结果及截图

相关文档
最新文档