下面是包含+ 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];
}
}
詢問如何使您的代碼正常工作,就像您希望它不在此處的主題一樣。我已經將此遷移到Stack Overflow。雖然如果您發佈完成的代碼以進行一般代碼審查,但一旦它達到您的要求,它會很好。 – sepp2k 2011-06-12 09:10:17