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