求一个有向无换图中,最长简单路径。动态规划问题15-1

package com.li.chapter15.Prictice;

/**
 * 练习题1: 求有向无环图两点路径的最大值。
 *
 * 思路: 给定有向无环图的矩阵, 从1-n的最长距离,2-n的最长距离...
 *
 * maxLength[i,j]=maxlenth[i,j-1]+length[j]  //length[j]是与终点相连的很多点之一。最大的一个。
 */
public class Question01 {

    public static void main(String[] args){
        int[][] matrix = {{0,2,3},{0,0,2},{0,0,0}};
        maxLength1(matrix);
    }
    /**
     *方法1
     * @param matrix 有向无换图的矩阵表示
     */
    public static void maxLength1(int[][] matrix) {
        int[][] maxLength=new int[matrix.length][matrix[0].length];  //存储i到j的最长距离
        for (int i = 0; i < matrix.length; i++) {
            maxLength[i][0] = 0;  //每个节点到初始节点都为0
        }

        for (int i = 1; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (i == j) {
                    maxLength[j][i]=0;  //因为无环
                    continue;
                }
                //j到i;
                int length = matrix[i].length;//遍历,第i个节点相邻的节点
                maxLength[j][i]=Integer.MIN_VALUE;
                for (int k = 0; k < i; k++) {
                    int value=maxLength[j][k]+matrix[k][i];
                    if (value > maxLength[j][i]) {
                        maxLength[j][i]=value;
                    }
                }
            }

        }
        for (int i = 0; i < maxLength.length; i++) {
            for (int j = 0; j < maxLength[0].length; j++) {
                System.out.print(maxLength[i][j]+"        ");
            }
            System.out.println("");
        }
    }

}

原文地址:https://www.cnblogs.com/liyafei/p/9127188.html

时间: 2024-08-23 22:58:40

求一个有向无换图中,最长简单路径。动态规划问题15-1的相关文章

软件工程结对开发之求一个或者多个数组中连续最大子数组之和3

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 三.代码 四.截图 五.总结 六.工作合影

求一个二维整数数组中最大子数组的和

要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. #include <iostream> using namespace std; #define M 1000 int A[M][M]; int AS[M][M]; inline int ArraySum(int s,int t,i

leetcode中一些要用到动态规划的题目

需要仔细回顾的题目: 1.Interleaving String   交叉存取字符串 2.Decode Ways   字符串解码 3.Subsets   Subsets II          求一个集合的幂集 leetcode中一些要用到动态规划的题目,布布扣,bubuko.com

Leetcode之深度优先搜索(DFS)专题-DFS+记忆化 329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)

Leetcode之深度优先搜索(DFS)专题-329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix) 深度优先搜索的解题详细介绍,点击 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ [9,9,4], [6,6,8], [2,1,1] ] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9].

[Swift]LeetCode329. 矩阵中的最长递增路径 | Longest Increasing Path in a Matrix

Given an integer matrix, find the length of the longest increasing path. From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move outside of the boundary (i.e. wrap-around is not allowed). E

LeetCode. 矩阵中的最长递增路径

题目要求: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例: 输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]. class Solution { public: int dx[5] = {-1, 0, 1, 0}; int dy[5] = {0, 1, 0, -1}; int longest

329. 矩阵中的最长递增路径

题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9].示例 2: 输入: nums = [ [3,4,5], [3,2,6], [2,2,1]] 输出: 4 解释: 最长递增路径是 [3, 4, 5, 6].注意不允许在对角线方向上移动

【python-leetcode329-深度优先搜索】矩阵中的最长递增路径

给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9].示例 2: 输入: nums = [ [3,4,5], [3,2,6], [2,2,1]] 输出: 4 解释: 最长递增路径是 [3, 4, 5, 6].注意不允许在对角线方向上移动. cl

求一个矩阵中最大的2*2矩阵(元素和最大)的和

编程题在线编程题30分2/2最大子矩阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description:求一个矩阵中最大的2*2矩阵(元素和最大)的和.如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3和为17输入m*n的矩阵输出该m*n矩阵的最大2*2子矩阵(元素和最大)的和 样例输入 1 2 0 3 4 ; 2 3 4 5 1