在我的分布式java类中,我必须制作一个能够使用线程来解决迷宫的算法。迷宫内的所有交叉点(多于一条剩余路径)将创建一个新线程,该线程将在旧线程停止的地方继续。最后,我将查看所有路径,并查看哪一条路径有效(从一开始就开始,到达终点)。
我想用Ford–Fulkerson algorithm做同样的事情,但这次,我不必使用线程,我想避免这种情况,因为有一个线程只是不断创建新线程新线程(等等)似乎不必要的危险。
这是我的伪代码算法+一些信息:
图表是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)
然后调用PathFinder.getAllPaths()
,并过滤无效路径(死角,循环)。实际上我打算在run()
部分内处理循环,但我忘了这样做。这很容易。
最后,我有一个包含所有路径的静态变量(arrayList)。我验证哪些路径是“有效的”,就是那样。
我应该使这个递归而不是使用线程吗?还有其他方法吗?我应该发布实际代码(尽管它不完整)。
答案 0 :(得分:1)
您可以使用队列而不是线程。每个交叉点只是添加要调查到队列的节点,主循环一直运行直到队列为空。
答案 1 :(得分:0)
最后,使用队列的建议答案是否违背了目的。如果我使用队列,我仍然需要实现某种回溯,这一点的全部意义是避免使用回溯,所以我将坚持使用线程。经过一番思考后,他们无法以负面的方式进行交互,从而消除了对并发问题的担忧。