首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从网络节点集计算路径

从网络节点集计算路径
EN

Stack Overflow用户
提问于 2012-10-03 11:41:32
回答 1查看 102关注 0票数 1

我有一个节点连接数组,其定义如下:

代码语言:javascript
复制
var arr = ['1-2','1-6','2-6','2-3','1-4','1-5','6-7','4-7','7-8'];

1-2表示节点1连接到节点2,依此类推。如您所见,有多个连接。

如果操作正确,您可以注意到各种独特的路径,如1-2-6-7-8,1-5等。我想计算路径如下:

代码语言:javascript
复制
path = ['1-2-6-7-8','1-6-7-8','1-2-3','1-4-7-8','1-5']

我已经逐个检查了每一个集合,但我认为我的代码太长了,性能不好。获取路径数组的最佳方法是什么?(路径在叶节点结束)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-03 14:46:43

这个解决方案怎么样,我认为它只适用于DAG:有向无环图

代码语言:javascript
复制
function toGraph(arr){
    d = {}
    for (var e=0; e<arr.length; e++){
        var edge = arr[e].split('-')
        if(!d[edge[0]]){d[edge[0]]=[]}
        if(!d[edge[1]]){d[edge[1]]=[]}
        d[edge[0]].push(edge[1])
    }
    return d
}    

function DFS(G,node,path,paths,visited){
    visited[node] = true
    path.push(node)
    if (G[node].length==0 && path.length>1) paths.push('['+path.join('-')+']')

    for (var s=0; s<G[node].length; s++){
        successor = G[node][s]
        if(!visited[successor]){
            DFS(G,successor,path,paths,visited)
        }
    }
    visited[node] = false
    path.pop()
}

function go(){
    var arr = ['1-2','1-6','2-6','2-3','1-4','1-5','6-7','4-7','7-8']   
    var paths = []
    DFS(toGraph(arr),'1',[],paths,{})
    return paths.toString()
}

当您调用go()时,您会得到以下输出

代码语言:javascript
复制
[1-2-6-7-8], [1-2-3], [1-6-7-8], [1-4-7-8], [1-5]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12701584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档