首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态规划技术中如何从头开始打印最优路径

动态规划技术中如何从头开始打印最优路径
EN

Stack Overflow用户
提问于 2011-06-12 16:06:06
回答 2查看 519关注 0票数 0

下面是包含+ve和-ve数字的数组的标准最大和的代码。我认为,下面的程序运行正常。Bot如何打印最优路径?通过保持指向最优父级的指针,我可以很容易地在反向打印路径,但如何在正向打印它,最好不需要保留太多额外的记账。

代码语言:javascript
复制
#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];

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-12 17:15:04

只需将颠倒的路径存储在一个临时数组中,然后向后迭代该数组。

票数 2
EN

Stack Overflow用户

发布于 2011-06-12 17:21:39

简单地说,您可以复制新数组(或堆栈)中的父数组,然后按倒序迭代数组,或者在else语句中使用next和next[i-1] = i代替父数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6321128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档