Как найти возможный путь (обход) - PullRequest
0 голосов
/ 25 апреля 2018

Как найти возможный путь обхода объекта снизу.

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, ноя не могу найти точную логику.

1 Ответ

0 голосов
/ 25 апреля 2018

Рекурсивно полезно для этого.

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)
...