《实验三-动态规划法求多段图问题》.docxVIP

《实验三-动态规划法求多段图问题》.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TAIWAN UNIVERSITY OF TECHNOLOGY 本科实验报告 课程名称: 算法设计与分析 实验项目:动态规划法求多段图问题 实验地点: 专业班级:学号: 学生姓名: 指导教师: 实验三动态规划法求多段图问题 一、 实验目的 掌握动态规划算法的基本思想 掌握多段图的动态规划算法 选择邻接表或邻接矩阵方式来存储图 分析算法求解的复杂度。 二、实验内容 设G=(V,E)是一个带权有向图,其顶点的集合V被划分成k2个不相交的子集 Vi , 1i=k , 其中V1和Vk分别只有一个顶点 s (源)和一个顶点t (汇)。图中所有边的始点和终点都在 相邻的两个子集 Vi和Vi+1中。求一条s到t的最短路线。参考讲义p136图5-24中的多段 图,试选择使用向前递推算法或向后递推算法求解多段图问题。 三、实验环境 程序设计语言:C++ 编程工具:microsoft visual studio 2010 四、算法描述和程序代码 #include stdio.h #include stdlib.h #include conio.h #include iostream.h #define MAX 100 #define n 12 #define k 5 int c[n][n]; void init(int cost[]) // 初始化图 { int i,j; for(i=0;i13;i++) { for(j=0;j13;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) //找到最小的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;jk;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++) 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) //找到最小的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]; cout\t\t\t 动态规划解多段图问题 endl; cout\n\n; init(cost); fgraph(cost,path,d); cout 输出使用向前递推算法后的最 短路径:\n\n”; for(int i=1;i=5;i++) ( coutpath[i]””; } cout\n; coutendl” 最短路径为长 度:cost[1]endl; cout\n; cout\n 输出使用

文档评论(0)

189****2507 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档