题目
一个有向图,求它的最长路。
输入
5 5
1 2 2
2 4 9
1 3 7
3 4 1
4 5 6
输出
17
解题思路
就是最短路的算法进行一些更改。不过注意加判断
if (a[i][k] && a[k][j])
因为最短路如果有一个不能连不会对结果照成影响,可最长路就不一定,如果不这样会循环然后数字会很大。
代码
#include<cstdio>
#include<iostream>
using namespace std;
int n,x,y,w,a[101][101],mins,k;
int main()
{scanf("%d%d",&n,&k); for (int i=1;i<=k;i++){scanf("%d%d%d",&x,&y,&w);a[x][y]=w;//输出}for (k=1;k<=n;k++)for (int i=1;i<=n;i++)for(int j=1;j<=n;j++)if (a[i][k] && a[k][j])//判断a[i][j]=max(a[i][j],a[i][k]+a[k][j]); //最长路for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)mins=max(mins,a[i][j]);//求最长的一条}printf("%d",mins);//输出
}