English 中文(简体)
3. 从弧到所有节点优化距离最短
原标题:Get shortest distance from src to all nodes optimization
  • 时间:2023-05-21 02:48:43
  •  标签:

我收到以下意见:<条码>[][]最先进的。 阵列长度为2。 因此,2D阵列各行各有2个要素。 每个要素都是垂直的。 它是双向的,即我们可以说,双向是双向的。 因此,如果我们走到这2D阵列,我们可以说,我们有没有方向的图表。

我试图找到距离<条码>one的距离,特别是所有节点的距离。 在本案中,从<代码>0到所有已存在的节点。

我的法典是行之有效的,但我认为,我对我想避免的事项再次表示意见。 我称职:computeDistPerNode(m,0,key);一次又一次,我确信,它正在对距离0的距离进行再计算,直到事先打电话时看到。 我无法优化这一方法,也无法利用过去的计算方法。 我如何这样做?

这里是工作守则,没有优化

    public Map<Integer, List<Integer>> createUnDirectedGraph(int [][]edges) {
    Map<Integer, List<Integer>> m = new HashMap<>();
    for(var i = 0; i<edges.length; i++) {
        m.put(edges[i][0], new ArrayList<>());
        m.put(edges[i][1], new ArrayList<>());
    }
    for(var edge:edges) {
        var v1 = edge[0];
        var v2 = edge[1];
        m.get(v1).add(v2);
        m.get(v2).add(v1);
    }
    return m;
}

public int[] getShortestDistances(Map<Integer, List<Integer>> m) {
    int distance[] = new int[m.size()];
    for(Integer key:m.keySet()) {
       var d = computeDistPerNode(m,0,key);
       distance[key] = d;
    }
    return distance;
}
public int computeDistPerNode(Map<Integer, List<Integer>> m, int src, int dest) {
    Queue<Integer> q = new LinkedList<>();
    Integer dist[] = new Integer[m.size()];
    Set<Integer> visited = new HashSet<>();
    Arrays.fill(dist, Integer.MAX_VALUE);
    dist[src] = 0;
    q.add(src);
    while(!q.isEmpty()) {
       var currNode = q.poll();
       if(visited.contains(currNode)) continue;
       visited.add(currNode);
       if(currNode == dest) {
           return dist[dest];
       }


       for(var child: m.get(currNode)) {
           if (visited.contains(child)) {
               continue;
           }

           q.offer(child);
           var newDist = 1 + dist[currNode];
           if(newDist<dist[child]) {
               dist[child] = newDist;
           }
       }
    }
    return -1;
}

public int[][] getsample() {
    int [][] edges = {
            {0,1},
            {0,2},
            {1,4},
            {2,3},
            {4,3},
            {0,4},
    };
    return edges;
}
问题回答

暂无回答




相关问题
热门标签