面试题 04.01. 节点间通路-----DFS、BFS

题目表述

节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。

示例:

输入: n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2

输出: true

DFS、BFS

  • 根据graph构建邻接表,可以用map构建,也可以用List构建。

  • BFS: 创建队列que存放当前节点以及访问过但未扩展的节点,用visited[]数组记录已经访问过的节点。

  • DFS: 用visited[]数组记录已经访问过的节点,迭代每条路径深度搜索,一旦找到target返回true

bfs

class Solution { public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) { List<List<Integer>> graphlist = new ArrayList<>(); for(int i= 0; i < n;i++){ graphlist.add(new ArrayList<>()); } for(int[] tmp : graph){ graphlist.get(tmp[0]).add(tmp[1]); } boolean[] visited = new boolean[n]; return bfs(graphlist,start,target,visited); } public boolean bfs(List<List<Integer>> graph, int start, int target, boolean[] visited){ Queue<Integer> queue = new LinkedList<>(); queue.offer(start); visited[start] = true; while (!queue.isEmpty()){ int tmp = queue.poll(); if(tmp == target){ return true; } for(int i : graph.get(tmp)){ if(visited[i]) continue; queue.offer(i); visited[i] = true; } } return false; } }

dfs

class Solution { public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) { List<List<Integer>> graphlist = new ArrayList<>(); for(int i= 0; i < n;i++){ graphlist.add(new ArrayList<>()); } for(int[] tmp : graph){ graphlist.get(tmp[0]).add(tmp[1]); } boolean[] visited = new boolean[n]; return dfs(graphlist,start,target,visited); } public boolean dfs(List<List<Integer>> graph, int start, int target, boolean[] visited){ visited[start] = true; if(start == target){ return true; } for(int i : graph.get(start)){ if(visited[i]) continue; if (dfs(graph,i,target,visited)) return true; } return false; } }

__EOF__

本文作者Younger
本文链接https://www.cnblogs.com/youngerwb/p/16244507.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   YoungerWb  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示