-
Notifications
You must be signed in to change notification settings - Fork 185
Open
Description
Take Breadth-First Search/tree.js (shown below) as an example.
The input to the BFS algorithm is a graph (or tree) and a starting node, while the BFS
function only takes the starting node s
as parameter, leaving the graph G
as a global variable. In my humble opinion, it would be better to avoid such mismatch, which can potentially confuse learners.
Note: This mismatch also appears in some other algorithm code.
algorithms/Brute Force/Breadth-First Search/tree.js
Lines 1 to 50 in fe3adcf
// import visualization libraries { | |
const { Tracer, GraphTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer'); | |
// } | |
const G = [ // G[i][j] indicates whether the path from the i-th node to the j-th node exists or not | |
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
]; | |
// define tracer variables { | |
const tracer = new GraphTracer(); | |
const logger = new LogTracer(); | |
tracer.log(logger); | |
Layout.setRoot(new VerticalLayout([tracer, logger])); | |
tracer.set(G); | |
tracer.layoutTree(0); | |
Tracer.delay(); | |
// } | |
function BFS(s) { // s = start node | |
const Q = []; | |
Q.push(s); // add start node to queue | |
// visualize { | |
tracer.visit(s); | |
Tracer.delay(); | |
// } | |
while (Q.length > 0) { | |
const node = Q.shift(); // dequeue | |
for (let i = 0; i < G[node].length; i++) { | |
if (G[node][i]) { // if current node has the i-th node as a child | |
Q.push(i); // add child node to queue | |
// visualize { | |
tracer.visit(i, node); | |
Tracer.delay(); | |
// } | |
} | |
} | |
} | |
} | |
BFS(0); |
Metadata
Metadata
Assignees
Labels
No labels