微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JAVA:使 TLS DFS 适应我拥有的变量源索引,目标索引,是 diagil(boolean)

如何解决JAVA:使 TLS DFS 适应我拥有的变量源索引,目标索引,是 diagil(boolean)

我正在处理矩阵,我需要获取从源索引到目标索引(其中索引值不为 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 举报,一经查实,本站将立刻删除。