有向无环图的最长路径【Java实现】
创始人
2024-06-02 08:33:36

题目描述

现有一个共n个顶点、m条边的有向无环图(假设顶点编号为从0n-1),求图的所有路径中边权之和的最大值(不固定起点和终点)

输入描述

第一行两个整数n、m(1≤n≤100,0≤m≤n(n−1)),分别表示顶点数、边数;

接下来m行,每行三个整数u、v、w(0≤u≤n−1,0≤v≤n−1,u≠v,1≤w≤100),表示一条边的起点和终点的编号及边权。数据保证不会有重边

输出描述

输出一个整数,表示路径上边权之和的最大值

样例

输入

6 7
0 1 1
0 2 2
1 3 3
1 4 4
2 4 2
3 5 2
4 5 3

输出

8
image-20230312104401240

思路分析

  • 题目不限制起点终点,因此根据贪心的原则,有路径就应该试着走一走,同时应该把每个顶点都当作起点试一遍
  • 如果我们能够知道由当前顶点i出发的最大权值之和,再通过比较各个权值之和选出最大值maxVal,就可以作为我们的答案。因此问题关键在于:如何记录由当前顶点i出发的最大权值之和?由此我们可以考虑使用动态规划
  • 设置g[n][n]用来存放顶点和边的关系,设置dp数组,其中dp[i]代表由当前顶点i出发所能得到的最大权值之和
  • 假设当前顶点i到顶点j之间有路径,那么由dp[i]的取值无非只有两种:
    1. dp[i]本身,即当前知道的i出发能够得到的权值之和,但是由于我们对dp的处理还不完全,因此此时的权值之和不一定是最大的
    2. dp[j] + g[i][j],即顶点i到顶点j的权重加上从j出发能够得到的权值之和
    3. 选择其中最大的作为dp[i]真正的值【此时i是固定的,j是变化的】
  • 此处可以做一个优化,即当dp[i]>0时直接返回dp[i],因为此时说明dp[i]已经被处理过,内部存储的就是从i点出发的最大值,不需要重复处理
  • 最后可以得到整体被处理好的数组dp,其中的最大值就是我们的答案

代码实现

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();// 存放地图int g[][] = new int[n][n];// dp[i]代表从 i 出发能够得到的最大权重之和int dp[] = new int[n];// 对图进行初始化for (int i = 0; i < m; i++) {int u = scanner.nextInt();int v = scanner.nextInt();int w = scanner.nextInt();g[u][v] = w;}int maxVal = 0;for (int i = 0; i < n; i++) {maxVal = Math.max(maxVal, getDAGMaxLength(g, dp, i, n));}System.out.println(maxVal);}// 返回从 i 出发的有向无环图最大权值之和路径public static int getDAGMaxLength(int g[][], int dp[], int i, int n) {// 说明 i 点已经处理过,不需要重复计算if (dp[i] > 0) {return dp[i];}for (int j = 0; j < n; j++) {// i 到 j 有路可走if (g[i][j] > 0) {// 看看从 j 出发的最大权值之和 + 当前顶点 i 到 j 的权重是否大于直接从 i 出发的最大权值之和dp[i] = Math.max(dp[i], getDAGMaxLength(g, dp, j, n) + g[i][j]);}}return dp[i];}}

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
怎么样的桃花 桃花近看远看的样... 今年的“三八”妇女节,阳光明媚,踏青赏花正当时。遂与姐妹们共赴十里蓝山,与花海来一场春天的约会。十里...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...