- 1、本文档共177页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划C语言精选
动态规划 思路 先看第5阶段,到达A点有两条路 B ? A,需要2km C ? A,需要3km 令 从P ? A的最短路径为P(A); 从P ? B的最短路径为P(B); 从P ? C的最短路径为P(C) …… P(A) = min{P(B)+2, P(C)+3}; P(B) = min{P(D)+1, P(E)+2}; P(C) = min{P(E)+5, P(F)+4}; P(A) = min{P(B)+2, P(C)+3}; P(B) = min{P(D)+1, P(E)+2}; P(C) = min{P(E)+5, P(F)+4}; D 1 B 2 A 2 3 5 P(B) E C 4 P(C) F P(N) = 2; P(O) = 3; 选择数据结构,将每条路经的长度存在数组中。 东西方向上的道路长度存在两维数组h[4][3]中规定数组的第一维为行号,第二维为列号。 南北方向上道路长度存至数组v[3][4]中,也规定第一维为行号,第二维为列号。 为了计算方便,将图1改为图2 求解过程为从(0, 0)到(3, 3)求最短路径问题 定义二维数组,P[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},第一维为行,第二维为列。这时P(O)为P[0][1];P(N)为P[1][0];…P(A)为P[3][3],以下为分阶段递推求解过程。 对于阶段2 P[1][1] = min{ P[0][1]+v[0][1], P[1][0]+h[1][0]} = min{3+1, 2+2} = 4 P[0][2] = P[0][1]+h[1][0] = 3+2 = 5 P[2][0] = P[1][0]+v[1][0] = 2+4 = 6 对于阶段3 P[1][2] = min{ P[0][2]+v[0][2], P[1][1]+h[1][1]} = min{5+3, 4+1} = 5 P[0][3] = P[0][2]+h[0][2] = 5+3 = 8 P[2][1] = min{ P[1][1]+v[1][1], P[2][0]+h[2][0]} = min{4+1, 6+1} = 5 P[3][0] = P[2][0]+v[2][0] = 6+1 = 7 对于阶段4 P[1][3] = min{ P[0][3]+v[0][3], P[1][2]+h[1][2]} = min{8+4, 5+4} = 9 P[2][2] = min{ P[1][2]+v[1][2], P[2][1]+h[2][1]} = min{5+2, 5+4} = 7 P[3][1] = min{ P[2][1]+v[2][1], P[3][0]+h[3][0]} = min{5+2, 7+3} = 7 对于阶段5 P[2][3] = min{ P[1][3]+v[1][3], P[2][2]+h[2][2]} = min{9+4, 7+5} = 12 P[3][2] = min{ P[2][2]+v[2][2], P[3][1]+h[3][1]} = min{7+2, 7+1} = 8 最后 P[3][3] = min{ P[2][3]+v[2][3], P[3][2]+h[3][2]} = min{12+3, 8+2} = 10 综上,数组P的通项表示为 P[i][j]= min( ( p[i-1][j]+v[i-1][j]), (p[i][j-1]+h[i][j-1]) ) (i, j0) P[0][j]=P[0][j-1]+h[0][j-1] ( i=0, j0) P[i][0]=P[i-1][0]+v[i-1][0] ( i0, j=0) 下面给出P数组中的数据 数组P的通项表示为 P[i][j]= min( ( p[i-1][j]+v[i-1][j]), (p[i][j-1]+h[i][j-1])
文档评论(0)