当前位置: 首页 > 知识库问答 >
问题:

Java:递归搜索函数

邢和光
2023-03-14

我通过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;
                    }
                }
            }


        }
    }


共有1个答案

林泰平
2023-03-14

首先,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那样仅给我数组中的文件。虽然 寻找像…的输出 问题答案: 基本上有两种方法可以实现此目的。在异步环境中,您会注意到有两种循环:串行循环和并行循环。串行循环等待一个