我有一个findAllPaths()
函数,用于查找图中所有可能的路径(存储在matrix
中):
public void findAllPaths(final Matrix matrix, final Index s, final Index d, HashMap <Index , Boolean> isVisited, Collection localPathList)
{
// Mark the current node
isVisited.put(s, true);
if (s.equals(d)) {
this.pathsList.add(new ArrayList<>(localPathList));
// if match found no need to traverse more till depth
isVisited.put(s, false);
return;
}
// Recur for all the vertices neighbors to current index
for (Index i : matrix.getNeighbors(s)) {
if (!isVisited.get(i)) {
// store current node in path[]
localPathList.add(i);
findAllPaths(matrix, i, d, isVisited, localPathList);
// remove current node in path[]
localPathList.remove(i);
}
}
// Mark the current node
isVisited.put(s, false);
}
我想尽可能地让它并行运行。
有人有什么办法可以实现吗?
ExecutorService
将递归调用作为任务而不是直接调用,然后使代码线程安全。同时将localPathList
复制一份而非共享它。 - Andreas