当前位置: 首页 > news >正文

旅游网站国内外研究现状muse做的网站怎么样

旅游网站国内外研究现状,muse做的网站怎么样,网站设计公司多少钱,制作网站赚钱不寻找图中是否存在路径 原题 有一个具有 n 个顶点的 双向 图#xff0c;其中每个顶点标记从 0 到 n - 1#xff08;包含 0 和 n - 1#xff09;。图中的边用一个二维整数数组 edges 表示#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点…寻找图中是否存在路径 原题 有一个具有 n 个顶点的 双向 图其中每个顶点标记从 0 到 n - 1包含 0 和 n - 1。图中的边用一个二维整数数组 edges 表示其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接并且没有顶点存在与自身相连的边。 请你确定是否存在从顶点 source 开始到顶点 destination 结束的 有效路径。 给你数组 edges 和整数 n、source 和 destination如果从 source 到 destination 存在 有效路径 则返回 true否则返回 false 。 示例 1图片转存自LeetCode 输入n 3, edges [[0,1],[1,2],[2,0]], source 0, destination 2 输出true 解释存在由顶点 0 到顶点 2 的路径: - 0 → 1 → 2 - 0 → 2示例 2 输入n 6, edges [[0,1],[0,2],[3,5],[5,4],[4,3]], source 0, destination 5 输出false 解释不存在由顶点 0 到顶点 5 的路径.提示 1 n 2 * 1050 edges.length 2 * 105edges[i].length 20 ui, vi n - 1ui ! vi0 source, destination n - 1不存在重复边不存在指向顶点自身的边 class Solution {public boolean validPath(int n, int[][] edges, int source, int destination) {} } 解题思路 将图的边列表二维整数数组 edges转化为图的邻接表形式以便快速访问每个节点的相邻节点信息。由于节点编号从 0 到 n-1 连续故采用数组而非 HashMap 进行存储。使用[[深度优先搜索]]递归地进行图的遍历。在遍历过程中需要避免重复访问已经访问过的节点因此使用一个 visited 数组来记录哪些节点已经被访问过。终止条件 如果在遍历过程中找到了 destination则可以立即返回 true表示路径存在。如果遍历了所有可能的路径都没有找到 destination则返回 false表示路径不存在。 代码示例 class Solution {public boolean validPath(int n, int[][] edges, int source, int destination) {// 如果起点和终点是同一个点直接返回 trueif (source destination) return true;// 构建邻接表用数组表示图ListInteger[] graph new ArrayList[n];for (int i 0; i n; i ) {graph[i] new ArrayList();}// 填充邻接表for (int[] edge : edges) {int fromNode edge[0];int toNode edge[1];graph[fromNode].add(toNode);graph[toNode].add(fromNode);}// 创建访问标记数组boolean[] visited new boolean[n];// 使用 DFS 检查是否存在从 source 到 destination 的路径return dfs(graph, visited, source, destination);}private boolean dfs(ListInteger[] graph, boolean[] visited, int node, int destination) {// 如果当前节点是目标节点返回 trueif (node destination) return true;// 标记当前节点为已访问visited[node] true;// 遍历所有相邻节点for (int neighbor : graph[node]) {// 如果相邻节点没有访问过进行递归 DFSif (!visited[neighbor]) {if (dfs(graph, visited, neighbor, destination)) {// 找到能到达终点的路径就返回 truereturn true;}}}// 所有路径都不能到达终点返回 falsereturn false;} } 优化思路 这是一个经典的并查集问题。通过并查集的数据结构可以高效地判断两个节点是否连通。每次将两个节点的根节点连接在一起最终只需检查 source 和 destination 是否有相同的根节点即可。 优化后代码 class Solution {private int[] parent;private int[] rank; // 树的高度数组public boolean validPath(int n, int[][] edges, int source, int destination) {parent new int[n];rank new int[n];// 初始化并查集每个节点的父节点为自己rank 初始化为 1for (int i 0; i n; i) {parent[i] i;rank[i] 1;}// 遍历所有边将两个节点连接即在并查集中合并for (int[] edge : edges) {union(edge[0], edge[1]);}// 检查起始节点和目标节点是否在同一集合中return find(source) find(destination);}// 查找某个节点的根节点同时进行路径压缩private int find(int x) {if (parent[x] ! x) { // 如果当前节点不是它自己的父节点则继续向上查找parent[x] find(parent[x]);}return parent[x];}// 合并两个集合使用 rank 优化合并private void union(int x, int y) {int rootX find(x);int rootY find(y);if (rootX ! rootY) {// 比较两个集合的 rankrank 小的合并到大的上if (rank[rootX] rank[rootY]) {parent[rootY] rootX; // 将 y 的根节点挂到 x 的根节点上} else if (rank[rootX] rank[rootY]) {parent[rootX] rootY; // 将 x 的根节点挂到 y 的根节点上} else {parent[rootY] rootX; // 如果 rank 相同随意合并但要增加新根的 rankrank[rootX];}}} }
http://www.hkea.cn/news/14410803/

相关文章:

  • 企业网站百度收录成都专业做游戏网站
  • 汉中网站建设开发惠州百度推广排名
  • 渭南市住房和城乡建设部网站数据库调用做wordpress
  • 江门住房和城乡建设部网站网站建设预算
  • 浙江网站建设推广公司哪家权威wordpress物联网插件
  • 设计网站大全免费建设蒙古语网站
  • 深圳沙井网站建设网站建设技术员分为前端 后端
  • 海洋网站建设网络公司西凤酒网站建设的基本情况
  • 网站开发和网站制作的区别客户管理的四个步骤
  • 临沧市住房和城乡建设局网站客套企业名录搜索
  • 福州网站建设费用wordpress 免费ssl证书
  • 公司营销型网站建设wordpress 分类目录排序
  • 做网站的文案是指一个网站怎么留住用户
  • 建立企业网站流程东营网站建设关键字排名问题
  • jsp个人网站怎样做wordpress 优化变快
  • 网站开发的重难点项目策划书八篇案例
  • 阿里云服务器发布网站杭州外贸网站多少钱
  • 专业做网站哪里好怎么样做网站推广
  • 服饰网站模板设计建网站怎么选择服务器
  • 哪些有名网站是用php做的网站数据库设计模板
  • 人防网站建设与服务龙岩网站建设加盟
  • 宁波网站搭建网络推广培训1对1
  • 网站开发方案ppt免费下载图片的网站有哪些
  • 网页显示网站正在建设中怎么做购物app首页ui设计
  • 网站怎么做下载连接2023年做网站怎么样
  • 网站哪个公司做的比较好洛阳建设局网站
  • 微信建网站平台的世界500强企业排行榜中国企业
  • 网站字体怎么修改重庆网站推广计划
  • 怎么做带后台的网站超大型网站建设
  • 企业网站制作需要多少钱贵阳手机银行app