无法获取有向图中从A到E的所有路由



我在获取图中的所有路由时遇到了一些问题。它对一些人有效,但很明显有些问题,因为它无法获得从A到E的所有路线。

let graph = {
'A': ['B', 'D', 'E'],
'B': ['C'],
'C': ['D', 'E'],
'D': ['C', 'E'],
'E': ['B']
};
function search(start, end, graph) {

let queue = [...graph[start]];
let visited =  [];
while (queue.length) {
count = 1;
let node = queue.shift();
if (graph[node]){
let answer = recursiveStep(node, end, graph, str = node, visit = new Set(), nodes = []);
if (answer){
visited.push(answer);
}
}
}
return visited;
}
function recursiveStep(start, end, graph, str, visit, nodes) {   
if (end === start) {
if (str.length <= 3 && !visit.has(str)) {
visit.add(str)
return str};
}
if (str.length > 3) return str = ""; 
nodes.push(...graph[start])
while (nodes.length) {
start = nodes.shift();
str += start
return recursiveStep(start, end, graph, str, visit, nodes)
}
return visit
}
console.log(search('A', 'E', graph));

输出是["DCE","E"],但由于我需要小于或等于3的所有路由。它应该是:['BCE','DCE','DE','E']。如果您想使用node复制和粘贴代码,该代码就可以工作。也许有一个错误,不太确定,但我也尝试过迭代。

您可以采用较小的方法,迭代实际节点并省略较长的路径和访问的项。

然后检查是否未到达末尾,并迭代下一个节点。

或者推动结果。

function search(start, end, graph) {
function iter(node, visited) {
graph[node].forEach(n => {
if (visited.length > 2 || visited.includes(n)) return;
if (n !== end) return iter(n, [...visited, n]);
result.push([...visited, n].join(''));                
});
}

var result = [];
iter(start, []);
return result;
}
let graph = { A: ['B', 'D', 'E'], B: ['C'], C: ['D', 'E'], D: ['C', 'E'], E: ['B'] };
console.log(search('A', 'E', graph));

最新更新