java - JAVA:使 TLS DFS 适应我拥有的变量(源索引,目标索引,是诊断(布尔)
问题描述
我正在使用矩阵,我需要获取从源索引到目标索引的所有路径(其中索引值不为 0),同时我可以选择是否按真/假计算对角线)。
我可以通过这种方式将变量发送到方法:(src, dest, indlueDiagnoal)
作为回报,我需要该方法提供所有路径的列表。
这是我拥有的类,它执行 TLS(线程本地存储)DFS,并且需要使方法遍历适应我拥有的变量:
public class ThreadLocalDfsVisit<T> {
protected final ThreadLocal<Stack<Node<T>>> stackThreadLocal
= ThreadLocal.withInitial(Stack::new);
protected final ThreadLocal<Set<Node<T>>> setThreadLocal =
ThreadLocal.withInitial(() -> new LinkedHashSet<>());
protected void threadLocalPush(Node<T> node) {
stackThreadLocal.get().push(node);
}
protected Node<T> threadLocalPop() {
return stackThreadLocal.get().pop();
}
public Set<T> traverse(HashSet<Index> visitedIndexes, Traversable<T> partOfGraph) {
threadLocalPush(partOfGraph.getOrigin());
while (!stackThreadLocal.get().isEmpty()) {
Node<T> poppedNode = threadLocalPop();
setThreadLocal.get().add(poppedNode);
Collection<Node<T>> reachableNodes = partOfGraph.getReachableNodes(poppedNode, true);
for (Node<T> singleReachableNode : reachableNodes) {
if (!setThreadLocal.get().contains(singleReachableNode) &&
!stackThreadLocal.get().contains(singleReachableNode)) {
threadLocalPush(singleReachableNode);
}
}
}
HashSet<T> blackList = new HashSet<>();
for (Node<T> node : setThreadLocal.get()) {
visitedIndexes.add((Index) node.getData());
blackList.add(node.getData());
}
stackThreadLocal.remove();
setThreadLocal.remove();
return blackList;
}
}
它应该以一种我可以从这个方法调用它的方式进行调整:
public List<List<Index>> getMinimumPath(Index src, Index dest, boolean indlueDiagnoal) {
List<List<Index>> allPathes = mThreadLocalDfsAlgorithem.traverse(src, dest, indlueDiagnoal); //find all paths
return getShortetPathWithWeight(allPathes);
解决方案
推荐阅读
- c# - 是 IQueryable 和 IQueryable
异步? - google-app-engine - Cloud Sql 二代问题
- javascript - 带有 Iron-ajax 的 Twitter API?
- c# - 每次使用 Serilog 创建新的 Logger 时,创建一个带有更新后缀的新文件
- ios - Swift:使用块模式的 LZ4 解码
- c# - 使用用户修改 DropdownList MVC?
- javascript - 如果不是返回值而是抛出错误,TypeScript 会给出错误
- visual-studio - Visual Studio 2017 中不存在要启动的 D 程序
- linux - 如何在docker的RUN命令中执行两个命令?
- python - 根据其他列值标记行