n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。

路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 a 到 b 的一条有向路线。

今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。

请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。
以下是解题的思路规划操作


```java
package com.chd.algorithm;import java.util.ArrayList;
import java.util.Scanner;/*** n = 6,* connections = [[0,1],[1,3],[2,3],[4,0],[4,5]]*/
public class TestGradeGrath在这里插入代码片 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
//        int N=scanner.nextInt();
//        int [][]connections=new int[5][5];int N=6;int [][]connections=new int[][]{{0,1},{1,3},{2,3},{4,0},{4,5}};int min = minRaide(N, connections);System.out.println("最小的结果是"+min);}private static int minRaide(int n, int[][] connections) {ArrayList<Integer>[] oldarj=new ArrayList[n];//存放有向无环图的邻接表ArrayList<Integer>[] newarj=new ArrayList[n];//转为无向图for (int i = 0; i < n; i++) {oldarj[i]=new ArrayList<>();newarj[i]=new ArrayList<>();}for (int[] connection : connections) {int from=connection[0];int to=connection[1];oldarj[from].add(to);newarj[from].add(to);newarj[to].add(f在这里插入代码片rom);}int []num={0};boolean []vist=new boolean[n];dfs(0,newarj,oldarj,num,vist);return num[0];}在这里插入代码片//将有向图转为无向图进行,然后进行递归的寻求最小值private static void dfs(int i, ArrayList<Integer>[] newarj, ArrayList<Integer>[] oldarj, int[] num, boolean[] vist) {vist[i]=true;ArrayList<Integer> list=newarj[i];for (int j = 0; j < list.size(); j++) {Integer flag = list.get(j);if (vist[flag]){continue;}if (!oldarj[flag].contains(i)){num[0]++;}dfs(flag,newarj,oldarj,num,vist);}}}
关键是将图转变为树的时候特别的,进行树的深度优先遍历,操作进行破解,即可得到解题答案

寻求路径问题————动态规划的思想相关推荐

  1. 矩阵的最小路径和——动态规划

    题目描述: 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和. 示例: [[1,3,5,9] ...

  2. 动态规划问题思想及算法

    基本思想 若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解. 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问 ...

  3. 动态规划——基本思想

    动态规划--基本思想 动态规划的特点 把原始问题划分为一系列子问题 求解每个子问题仅一次,并将其结果保存在一个表中,以后用到时到时直接存取,不重复计算,节省计算时间 自底向上地计算 使用范围 一类优化 ...

  4. 记忆化搜索=搜索的形式+动态规划的思想(来自百度百科)

    记忆化搜索=搜索的形式+动态规划的思想 记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存. 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态. ...

  5. 动态规划算法思想解决找零钱问题

    前言 关于找零钱问题,网上已经有很多相关的资料以及优秀的文章博客等.这里写这篇博客的初衷很简单,就是为了方便自己,回过头来捡起这个知识能快一点,接受起来更易理解点:他人的文章写的再好,毕竟是别人的,学 ...

  6. Java使用动态规划算法思想解决01背包问题

    Java使用动态规划算法思想解决背包问题 背包问题是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高 动 ...

  7. 动态规划 --- 算法思想介绍

    一.动态规划的基本概念 动态规划在五种算法设计方法中难度最大,它建立在最优原则的基础上.采用动态规划方法,可以高效地解决许多用贪婪算法或分治法无法解决的问题.动态规划(dynamic programm ...

  8. 三角形最小路径和(动态规划)

    原创公众号:bigsai 欢迎加入力扣打卡 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 题目描述 力扣120原题 给定一个三角形 triangle ,找出自顶向下的最小路径和. ...

  9. [Leetcode][第120题][JAVA][三角形最小路径和][动态规划][递归]

    [问题描述][中等] [解答思路] 1. 动态规划思路一 自上而下 第 1 步:设计状态 f[i][j] 表示从三角形顶部走到位置 (i,j) 的最小路径和 位置(i,j) 指的是三角形中第 i 行第 ...

最新文章

  1. YOLO之父退出CV界表达抗议,拒绝AI算法用于军事和隐私窥探
  2. leetcode算法题--奇偶链表
  3. [转载 css]word-wrap,word-break,white-space,text-overflow的区别和用法
  4. 什么是Windows Service应用程序?(转)
  5. rtsp协议_如何在RTSP协议视频智能平台EasyNVR未登录的情况下调用通道直播的接口?...
  6. 几个超级实用但很少人知道的 VS 技巧[更新]
  7. 【朝夕技术专刊】WebApi部署多服务器配置Nginx负载均衡
  8. AUTOSAR专业知识篇(八)-ID.3 和大众的电气化平台
  9. 华为手机打字声音怎么开启_华为手机这5个超实用小功能,记得要开启,谁用都说好...
  10. 在博客里轻松使用LaTeX 数学公式[转]
  11. linux 下外语学习软件_学习外语如何帮助您学习编码
  12. 使用git将本地文件上传到远程仓库
  13. CF Round #580(div2)题解报告
  14. 简单的心形html代码,bat心形代码的简单示例
  15. [Linux]基于网络编程的智能机器小伴侣
  16. SpringBoot---Tomcat日志配置
  17. 计算机编程大赛报道,带你领略编程的魅力———记重庆大学程序设计大赛
  18. 2022杭州华为OD面试经历
  19. uva 11137 Ingenuous Cubrency(完全背包)
  20. OEL8上VNC无法访问图形界面的解决方法

热门文章

  1. PLC数据采集有何难点?有什么解决方法?
  2. 【C语言--文件】(详细解读)
  3. 使用完整拼音查找汉字(完整拼音,不是网上散布的首字符拼音那种方法)
  4. 蓝桥杯 - 历届试题 小朋友排队 C语言实现
  5. Android转场动画(View Activity ARouter)
  6. Codeforces Round #548 (Div. 2)C. Edgy Trees 并查集
  7. EXCEL中如何提取身份证出生日期和性别信息以及检验身份证号码的正确性
  8. elasticsearch从入门到入门系列(四)---搜索高级使用
  9. [附源码]Python计算机毕业设计SSM基于的影评系统(程序+LW)
  10. Flume从入门实战到精通再到面试一文搞定