如何找到从下面的物体穿过的可能路径。

var pathObject = {
                A :["B"],
                B :["C", "D"],
                D :["E"],
                C :["F", "E"],
                E :["G"],
                F :["G"],
                G :["H"],
                H :[]
            }


预期输出为:

[
   ["A", "B", "C", "F", "G", "H"],
   ["A", "B", "D", "E", "G", "H"],
   ["A", "B", "C", "E", "G", "H"]
];


如何实现这一点。我尝试使用while循环,但是我无法找到确切的逻辑。

最佳答案

递归对此很有用。

var pathObject = {
                A :["B"],
                B :["C", "D"],
                D :["E"],
                C :["F", "E"],
                E :["G"],
                F :["G"],
                G :["H"],
                H :[]
            }

var paths = []
function findPath(data, currentPath, currentPoint) {
    currentPath.push(currentPoint);
    if(data[currentPoint].length == 0) {
        paths.push(currentPath)
    } else {
        data[currentPoint].map(nextPoint => {
            findPath(data, currentPath.slice(0), nextPoint)
        })
    }
}
findPath(pathObject, [], "A");
console.log(paths)

10-06 02:26