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

时间:2013-12-12 16:44:59

标签: java multithreading path-finding ford-fulkerson

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

我想用Ford–Fulkerson algorithm做同样的事情,但这次,我不必使用线程,我想避免这种情况,因为有一个线程只是不断创建新线程新线程(等等)似乎不必要的危险。

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

图表是nn矩阵,其中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)。我验证哪些路径是“有效的”,就是那样。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

最后,使用队列的建议答案是否违背了目的。如果我使用队列,我仍然需要实现某种回溯,这一点的全部意义是避免使用回溯,所以我将坚持使用线程。经过一番思考后,他们无法以负面的方式进行交互,从而消除了对并发问题的担忧。