我收到以下意见:<条码>[][]最先进的条码>。 阵列长度为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;
}