问题描述
我正在处理矩阵,我需要获取从源索引到目标索引(其中索引值不为 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,indlueDiagnoal); //find all paths
return getShortetPathWithWeight(allPathes);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)