leetcode 访问所有子节点的最短路径
时间:2021-08-06
本文章向大家介绍leetcode 访问所有子节点的最短路径,主要包括leetcode 访问所有子节点的最短路径使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
思路与算法
由于题目需要我们求出「访问所有节点的最短路径的长度」,并且图中每一条边的长度均为 11,因此我们可以考虑使用广度优先搜索的方法求出最短路径。
在常规的广度优先搜索中,我们会在队列中存储节点的编号。对于本题而言,最短路径的前提是「访问了所有节点」,因此除了记录节点的编号以外,我们还需要记录每一个节点的经过情况。因此,我们使用三元组 表示队列中的每一个元素,再进行遍历。具体见链接:
链接:https://leetcode-cn.com/problems/shortest-path-visiting-all-nodes/solution/fang-wen-suo-you-jie-dian-de-zui-duan-lu-mqc2/
class Solution { public int shortestPathLength(int[][] graph) { int n = graph.length; Queue<int[]> queue = new LinkedList<int[]>(); boolean[][] seen = new boolean[n][1 << n]; for (int i = 0; i < n; ++i) { queue.offer(new int[]{i, 1 << i, 0}); seen[i][1 << i] = true; } int ans = 0; while (!queue.isEmpty()) { int[] tuple = queue.poll(); int u = tuple[0], mask = tuple[1], dist = tuple[2]; if (mask == (1 << n) - 1) { ans = dist; break; } // 搜索相邻的节点 for (int v : graph[u]) { // 将 mask 的第 v 位置为 1 int maskV = mask | (1 << v); if (!seen[v][maskV]) { queue.offer(new int[]{v, maskV, dist + 1}); seen[v][maskV] = true; } } } return ans; } }
原文地址:https://www.cnblogs.com/xxsdbk/p/15107315.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript闭包实例讲解
- 最全总结!聊聊 Python 操作PDF的几种方法(合并、拆分、水印、加密)
- 作用域和作用域链的简单理解
- 如何在js中创建对象
- 如何理解JavaScript中的this
- 学习Matplotlib看这一份笔记就够了!
- 6个提升效率的pandas小技巧
- 手把手教你用Python+Pyecharts让微博热搜榜动起来
- JS继承
- call,apply,bind 的完全实现和理 解
- js构造函数的理解
- 实战 | PyQt5制作雪球网股票数据爬虫工具
- 别再问我Python怎么操作Word了!
- Vaex :突破pandas,快速分析100GB大数据集
- 【适合收藏】为了多点时间陪女朋友,我向BAT大佬跪求了这15条JS技巧