【发布时间】:2020-09-09 12:41:12
【问题描述】:
我想遍历一个图,并与队列值(如果存在)进行比较。
我想将这个python代码实际实现到java
遍历当前节点
for it in gr[curr] :
iin f it not in pq :
pq.insert(0,( dist * it[1], it[0] ));
这里,gr是一个图,pq是一个队列arraylist,dist是int变量
其实我想用java实现这个——
https://www.geeksforgeeks.org/path-with-smallest-product-of-edges-with-weight-1/
这是我到目前为止的完整代码 -
package com.company;
import java.util.*;
public class solution {
public static int dijkstra(int s, int d, ArrayList<ArrayList<Integer>>graph) {
if (s == d) return 0;
ArrayList<ArrayList<Integer>> queue = new ArrayList<>(10);
for(int i=0; i < 10 ; i++) {
ArrayList<Integer> sublist = new ArrayList<>(10);
sublist.add(0);
queue.add(sublist);
}
queue.get(0).add(1);
boolean[] v = {false};
while (!queue.isEmpty()) {
int curr = queue.get(0).get(1);
int dist = queue.get(0).get(0);
queue.remove(curr);
if (v[curr])
continue;
v[curr] = true;
if (curr == d)
return dist;
Iterator<ArrayList<Integer>> iter = graph.iterator();
while (iter.hasNext())
{
queue.add()\\not completed
}
}
return -1;
}
public static void main(String[]args)
{
int n = 3;
ArrayList<ArrayList<Integer>> graph = new ArrayList<>(n+2);
for(int i=0; i < n+2 ; i++) {
ArrayList<Integer> list = new ArrayList<>();
for(int j = 0; j< n+2; j++){
list.add(0);
}
graph.add(list);
}
graph.get(1).add(3,9);
graph.get(2).add(3,1);
graph.get(1).add(2,5);
int s = 1, d = 3;
System.out.println(dijkstra(s,d,graph));
}
}
【问题讨论】:
-
是
pq优先队列吗? -
不,一般队列
-
it呢? -
你能把图表示一下吗
-
我已经更新了我想要的和我的代码