1、求解最长路径长度
const int maxn=100010;
int dp[maxn];
memset(dp,0,sizeof(dp));
int DP(int i)
{
if(dp[i]>0) return dp[i];
for(int j=0;j<n;j++)
{
if(G[i][j]!=inf)
{
int temp=G[i][j]+DP(j);
if(temp>dp[i])
{
dp[i]=temp;
}
//dp[i]=max(dp[i],DP(j)+G[i][j]);
}
}
return dp[i];
}
2、记录最长路径的dp算法
int choice[maxn];
fill(choice,choice+maxn,-1);
int DP(int i)
{
if(dp[i]>0) return dp[i];
for(int j=0;j<n;j++)
{
if(G[i][j]!=inf)
{
int temp=DP(j)+G[i][j];
if(temp>dp[i])
{
dp[i]=temp;
choice[i]=j;
}
}
}
return dp[i];
}
//打印
//先求出最大的dp[i],然后将i作为参数传入
void printPath(int i)
{
printf("%d",i);
while(choice