I am trying to traverse a graph in javascript. My job is to traverse and parse all the possible outcomes of the following graph.
This is how I am storing the graph in a JS object.
var graph = {
alpha: {
in: [],
out: ['a', 'b']
},
a: {
in: ['alpha'],
out: []
},
b: {
in: ['alpha'],
out: ['c', 'e']
},
c: {
in: ['b'],
out: ['d']
},
d: {
in: ['c'],
out: []
},
e: {
in: ['b'],
out: ['f', 'g']
},
f: {
in: ['e'],
out: []
},
g: {
in: ['e'],
out: []
}
};
I need to parse it to get the following output.
output = [
['alpha', 'a'],
['alpha', 'b', 'c', 'd'],
['alpha', 'b', 'e', 'f'],
['alpha', 'b', 'e', 'g']
];
Key things to note are :
alphais always the parent node.- any node can have only
oneinput connection and maximum ofn-number of output connections
Right now my approach is to use recursion. BUt I just can't get my head around it. Can anyone give me a hand here?
var getChild = function (Obj) {
if ( Obj['out'].length == 0){
console.log('END');
return
}else{
var shifted = Obj['out'].shift();
console.log(shifted);
return getChild(graph[shifted]);
}
}
Can anyone guide me to traverse the graph in maximum efficient way
outproperty traversed ? Why would[alpha, b, e, g]containe?ghas a self loop.