我通过HashMap创建一个无向和无权重的图
然后,我想找到节点之间的所有最短路径。我的想法是检查源节点的所有邻居是否是目标节点的邻居。如果没有,它将检查源节点的邻居的邻居。
我想检查所有黄色节点,然后检查绿色节点,直到找到目的地的邻居。但是,当我尝试使用同时循环和递归函数来查找最短路径时,它将检查第一个黄色节点,然后检查第一个绿色节点。
我如何解决它?
还是我的想法其实是错的?
这是我的密码。inputData用于从txt文件获取数据。
static Map<Integer, HashSet<Integer>> graph = new HashMap<Integer, HashSet<Integer>>();
public static void inputData(Integer k, Integer v) {
if (graph.containsKey(k)) {
HashSet<Integer> s = new HashSet<Integer>(graph.get(k));
s.add(v);
graph.put(k, s);
}
else {
HashSet<Integer> s = new HashSet<Integer>();
s.add(v);
graph.put(k, s);
}
if (graph.containsKey(v)) {
HashSet<Integer> s = new HashSet<Integer>(graph.get(v));
s.add(k);
graph.put(v, s);
}
else {
HashSet<Integer> s = new HashSet<Integer>();
s.add(k);
graph.put(v, s);
}
}
public static void findAllShortestPaths() {`
for (Integer key : graph.keySet()) {
Iterator it = graph.entrySet().iterator();
while (it.hasNext()) {
Integer k = (Integer) it.next();
if (k == key) {
break;
}
}
while (it.hasNext()) {
Integer k = (Integer) it.next();
if (!(isNeighbour(key, k))) {
findShortestPaths(key, k);
}
}
}
}
public static void findShortestPaths(Integer source, Integer dest) {
HashSet<Integer> sp = new HashSet<Integer>(graph.get(source));
if (!(isNeighbor(source, dest))) {
Iterator it = sp.iterator();
boolean isfound = false;
while (!isfound) {
while (it.hasNext()) {
if (isNeighbor((Integer) it.next(), dest)) {
isfound = true;
}
}
}
}
}
首先,HashMap
是无序的。因此,不可能按特定顺序解析节点。
您可以使用类来创建图形结构。就像你在做BFS一样。
class Node {
List<Node> adjacentNodes;
}
您可以迭代相邻节点的列表。因为名单将维持秩序。
问题内容: 用Java查找具有特定名称的目录的最佳方法是什么?我要查找的目录可以位于当前目录或其子目录之一中。 问题答案: 您的解决方案将包括 API参考
null 请记住,我是一个非常早期,初学者,婴儿程序员和DIY课,我正在学习的糟糕的解释东西。所以请简单明了。谢谢你。
我有嵌套父子项的: 使用: 我访问第一级项目“A”:。 现在,我迭代每个第一级“A”项来访问他们的孩子——第二级项目“B”: 在第二个层次,我不知道下面是否有任何第三个层次的项目“C”。如何确保函数向下推进,因为下面有嵌套的项目,将项目添加到列表中,直到它到达末尾?
问题内容: 我正在尝试使用递归搜索返回指定目录中的文件。我成功实现了这一点,但是我想添加几行代码,这些代码使我可以指定要返回的某些扩展名。 例如,仅返回目录中的.jpg文件。 这是我的代码, 请让我知道我可以在上述代码中添加些什么来实现此目标,谢谢 问题答案:
我还不太理解递归,我有一些作业我不能解决。有人有主意吗? 任务1:实现一个int方法max(int[]arr,int i),该方法返回arr中所有元素的最大值和索引 这是我迄今为止的代码: 实际上它是有效的,但它的风格很差,所以我的问题是:如果没有私有静态int max,我如何实现递归方法?我不允许向该方法添加第三个参数。 任务2:实现一个布尔方法包含值(int[]arr,int val),如果a
问题内容: 关于使用fs.readdir进行异步目录搜索的任何想法?我意识到我们可以引入递归并使用下一个目录来调用read目录函数以进行读取,但是我有点担心它不会异步… 有任何想法吗?我看过很棒的node-walk,但是不像readdir那样仅给我数组中的文件。虽然 寻找像…的输出 问题答案: 基本上有两种方法可以实现此目的。在异步环境中,您会注意到有两种循环:串行循环和并行循环。串行循环等待一个