题目:
当大家在考场中接受考验(折磨?)的时候,小呆正在悠闲(欠扁)地玩一个叫“最初梦想”的游戏。游戏描述的是一个叫pass的有志少年在不同的时空穿越对抗传说中的大魔王chinesesonic的故事。小呆发现这个游戏的故事流程设计得很复杂,它有着很多的分支剧情,但不同的分支剧情是可以同时进行的,因此游戏可以由剧情和剧情的结束点组成,某些剧情必须要在一些特定的剧情结束后才能继续发展。为了体验游戏的完整性,小呆决定要看到所有的分支剧情——完成所有的任务。但这样做会不会耽误小呆宝贵的睡觉时间呢?所以就请你来解决这个问题了。小呆会给你一个剧情流程和完成条件的列表,其中第一行有一个数n(0
这道题纯粹是语文题(什么时候让HHD去做做O(∩_∩)O~~)
好不容易看懂了题目的意思:求最长路并打印路径。又改了一下就A了,这样,那个辛辛苦苦做的out函数反而没调用。
#include
using namespace std;
long f[101][101],i,j,k,x,y,z,n,m,pre[101][101];
void out(long l,long r)
{
if (pre[l][r]==0) return;
out(l,pre[l][r]);
printf("%ld ",pre[l][r]);
out(pre[l][r],r);
}
int main()
{
scanf("%ld",&n);n++;
scanf("%ld",&m);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
f[i][j]=0;
for (i=1;i<=m;i++)
{
scanf("%ld %ld%ld",&x,&y,&z);
f[x][y]=z;
}
for (k=1;k<=n;k++)
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if((i!=j)&&(i!=k)&&(j!=k)&&(f[i][k]>0)&&(f[k][j]>0)&&(f[i][k]+f[k][j]>f[i][j]))
{
f[i][j]=f[i][k]+f[k][j];
//pre[i][j]=k;
}
printf("%ld\n",f[1][n]);
printf("1 ");
for (i=2;i