Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不使用线程的情况下,实现此路径查找代码的好方法是什么?_Java_Multithreading_Path Finding_Ford Fulkerson - Fatal编程技术网

Java 在不使用线程的情况下,实现此路径查找代码的好方法是什么?

Java 在不使用线程的情况下,实现此路径查找代码的好方法是什么?,java,multithreading,path-finding,ford-fulkerson,Java,Multithreading,Path Finding,Ford Fulkerson,在我的分布式java类中,我必须制定一个算法,使用线程解决迷宫。迷宫中的所有交叉点(多条剩余路径)将创建一条新的线程,该线程将在旧线程停止的地方继续。最后,我会查看所有路径,看看哪一条是有效的(从开始到结束) 我想用a做同样的事情,但这次,我不必使用线程,我想避免使用线程,因为有一个线程不断地生成新线程,生成新线程(等等)似乎是不必要的危险 这是我的伪代码算法+一些信息: 该图是由n矩阵构成的n,其中int矩阵[line][column]表示节点行索引和节点列索引之间的流(未连接的流为-1) 在

在我的分布式java类中,我必须制定一个算法,使用线程解决迷宫。迷宫中的所有交叉点(多条剩余路径)将创建一条新的线程,该线程将在旧线程停止的地方继续。最后,我会查看所有路径,看看哪一条是有效的(从开始到结束)

我想用a做同样的事情,但这次,我不必使用线程,我想避免使用线程,因为有一个线程不断地生成新线程,生成新线程(等等)似乎是不必要的危险

这是我的伪代码算法+一些信息:

该图是由
n
矩阵构成的
n
,其中
int矩阵[line][column]
表示节点
行索引
和节点
列索引
之间的
流(未连接的流为-1)

在主程序中,我只需调用
pathFinder(start,end)
然后调用
pathFinder.getAllPaths()
,并过滤无效路径(死端,循环)。实际上,我计划在
run()
部分中处理循环,但我忘了这么做。这很容易

最后是一个包含所有路径的静态变量(arrayList)。我验证哪些路径是“有效的”,仅此而已


我应该使用递归而不是线程吗?还有其他解决办法吗?我是否应该发布实际代码(尽管它不完整)。

您可以使用队列而不是线程。每个交叉口只是向队列中添加要调查的节点,主环路一直运行,直到队列为空。

最后,使用队列的建议答案是无效的。如果我使用队列,我仍然需要实现某种回溯,这一点是为了避免使用回溯,所以我将坚持使用线程。经过一番思考,它们不可能以消极的方式进行交互,从而消除对并发问题的任何恐惧。

Hmnmm,我似乎无法想象这到底是如何工作的。在我的版本中,每次我到达交叉点时都会创建一个新实体(每个实体都有自己的路径)。我应该对队列执行同样的操作吗?因为如果没有,那么我很难在不使用任何回溯的情况下找到所有路径。它本质上是具有所有路径的同一实体(对象),而不是具有一条路径的对象。当然,这听起来更好,但没那么容易,这只是家庭作业。我不知道如何在不让它变得同样复杂的情况下实现它(尽管我想调试起来更容易)。@Kalec:任何递归算法(比如你问题中链接中的python示例)都可以使用队列而不是递归来实现。但这不是一个家庭作业回答网站。祝你好运我在你的问题中没有提到“避免回溯”;它只说“避免线程”。。。
PathFinder:
    current
    start
    end
    path[] // actually an arraylist of integer

    run () { // thread part
        while not at end path {
            if possible paths == 0
               return
            if possible paths == 1
               continue that way
            if possible paths > 1
               create new thread for each path // each thread inherits path up to this point
        }
    }