如何解决动态编程技术从一开始就如何打印最佳路径
| 以下是包含+ ve和-ve数字的数组的标准maxsum的代码。我认为,以下程序可以正常工作。 Bot如何打印最佳路径? 通过保持指向最佳父级的指针,我可以轻松地向后打印路径,但是如何向前打印,最好不要保留过多的簿记内容。#include <stdio.h>
main()
{
int array[]={5,-5,3,4,-2};
int n=5;
int i;
int maxsumendingat[n];
int parent[n];
int maxsum=-9999; // better way to code?
int optimallastindex;
maxsumendingat[0]=array[0];
for(i=1;i<n;i++)
{
if(maxsumendingat[i-1] <= 0)
{
maxsumendingat[i]=array[i];
parent[i]=i;
}
else
{
maxsumendingat[i]=array[i]+maxsumendingat[i-1]; // also keep backtracking info
parent[i]=i-1;
}
}
// now print results
for(i=0;i<n;i++)
{
if(maxsum < maxsumendingat[i])
{
maxsum=maxsumendingat[i];
optimallastindex=i;
}
}
// now print path. how to print it in fwd direction?
i=optimallastindex;
printf(\"%d \",array[i]);
while(parent[i]!= i)
{
printf(\"%d \",array[parent[i]]);
i=parent[i];
}
}
解决方法
只需将反向路径存储在临时数组中,然后向后迭代该数组即可。
, 简单地,您可以将父级复制到新数组(或堆栈)中,然后以向后的顺序迭代数组,或者代替使用父级next和在
else
语句中执行next[i-1] = i
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。