-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraph-bfs.js
More file actions
60 lines (43 loc) · 1.11 KB
/
Copy pathgraph-bfs.js
File metadata and controls
60 lines (43 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
'use strict';
var gh = require('./graph');
//-------------------------------------------------------------
function GraphAlgo(graph) {
this.graph = graph;
}
GraphAlgo.prototype.bfs = function(rootId, result, discovered) {
var self = this;
var discovered = {}
var result = [];
var queue = [];
// //initial discover root and make it as discovered
queue.push(rootId);
discovered[rootId] = 1
while( queue.length > 0 ) {
var vertexId = queue.shift();
console.log('discovered ' + vertexId );
var edges = this.graph.getOutgoingEdges(vertexId);
if( edges != undefined) {
edges.forEach( function(edge) {
// discover each target and marked it as discovered
if( discovered[edge.targetId] == undefined ) {
discovered[edge.targetId] = 1;
queue.push(edge.targetId);
}
});
}
}
}
//==================================================
var g = new gh.Graph();
g.addVertex(1);
g.addVertex(2);
g.addVertex(3);
g.addVertex(4);
g.addEdge(1, 2);
g.addEdge(1, 3);
g.addEdge(2, 3);
g.addEdge(2, 4);
g.addEdge(3, 4);
console.log('graph: ' + g.toString());
var algo = new GraphAlgo(g);
algo.bfs(1);