在我的分布式 Java 类中,我必须创建一个使用线程解决迷宫的算法。迷宫中的所有交叉点(多于一条剩余路径)将创建一个新线程,该线程将在旧线程中断的地方继续。最后我会查看所有路径,看看哪一个是有效的(从头开始,到最后)。
我想用Ford-Fulkerson 算法做同样的事情,但是这一次,我不必使用线程,我想避免这种情况,因为有一个线程会不断产生新线程,从而产生新线程(并且等等)似乎不必要的危险。
这是我的伪代码算法+一些信息:
该图是一个n
矩阵n
,其中int matrix [line][column]
表示flow
节点line index
和节点之间column index
(未连接的流为-1)
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
}
}
在主程序中我只是调用pathFinder(start,end)
then PathFinder.getAllPaths()
,并过滤无效路径(死胡同、循环)。好吧,实际上我计划在该run()
部分中处理循环,但我还忘了这样做。这很容易。
最后,我有一个包含所有路径的静态变量(arrayList)。我验证哪些路径是“有效的”,就是这样。
我应该使这个递归而不是使用线程吗?还有其他解决方案吗?我应该发布实际代码(尽管它不完整)。