zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 04.01. 节点间通路

    题目:

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

    示例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。
    图中可能存在自环和平行边。

    分析:

    将给的边存成map,也就是节点和该节点能到达的节点列表的映射,然后dfs搜索即可。

    程序:

    class Solution {
        public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) {
            map = new HashMap<>();
            visited = new int[n];
            for(int[] edge:graph){
                List<Integer> list = map.getOrDefault(edge[0], new ArrayList<>());
                list.add(edge[1]);
                map.put(edge[0], list);
            }
            return dfs(start, target);
        }
        private boolean dfs(int start, int target){
            if(start == target)
                return true;
            visited[start] = 1;
            if(map.get(start) == null)
                return false;
            List<Integer> list = map.get(start);
            for(int i:list){
                if(visited[i] == 0){
                    if(dfs(i, target))
                        return true;
                }
            }
            visited[start] = 1;
            return false;
        }
    
        private HashMap<Integer, List<Integer>> map;
        private int[] visited;
    }
  • 相关阅读:
    老陈与小石头运算代码
    第五次作业
    老陈与小石头
    简易四则运算
    四则运算
    对git的认识
    第一次作业
    arcgis-tomcat-cors
    jquery deferred promise
    springloaded hot deploy
  • 原文地址:https://www.cnblogs.com/silentteller/p/12423046.html
Copyright © 2011-2022 走看看