6 月更文挑战节 · 点间通路

135 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

一、题目描述:

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

示例1:

输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出:true 示例2:

输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3], [3, 4]], start = 0, target = 4 输出 true 提示:

节点数量n在[0, 1e5]范围内。 节点编号大于等于 0 小于 n。 图中可能存在自环和平行边。

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ro… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

1.创建邻接表map,通过Map,构建图的邻接表。key存储每个节点,value存储该节点能到达的其他节点, 新出现的节点,对应的value为空列表

  1. 建一个函数进行广度遍历,判断是否start与target之间是否有通路
  2. 维护一个队列:从start节点开始访问,访问过程中start能到达的节点继续入列
  3. 判断queue是否为空,不为空就继续取值,判断是否存在target目标节点 取出队列中的节点,从而得到对应联通的其他节点,判定是否存在target。
  4. 当前节点temp不能通往其他任何一个节点 或 之前已经访问过了,则跳过此次循环
  5. 用数组标记新的节点,并入列queue

三、AC 代码:

class Solution {
    public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) {
       
        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int[] po : graph){
            if (!map.containsKey(po[0])){
                map.put(po[0], new ArrayList<>()); 
            }
            map.get(po[0]).add(po[1]);  
        }
​
        return hasPath(n, map, start, target);  
    }
​
    public boolean hasPath(int n, Map<Integer, List<Integer>> map, int start, int target){
        
        LinkedList<Integer> queue = new LinkedList<>();
        queue.add(start);
​
        boolean[] visited = new boolean[n]; 
        visited[start]=true;
​
        while (!queue.isEmpty()){  // while
            int temp = queue.pop();  
            List<Integer> list = map.get(temp);
​
            
            if (list == null){
                continue;  
            }
​
            for (int num : list){
              
                if (num == target)
                    return true;
               
                if (visited[num] == true)
                    continue;
      
                visited[num] = true;
                queue.add(num); 
            }
        }
​
        return false;  
​
    }
}

四、总结:

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助,期待您找到心意的工作和满意的offer

期待下次再见~

\