mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 08:16:50 +08:00
merge: Modify Graph bfs method (#847)
This commit is contained in:
@ -39,21 +39,19 @@ class Graph {
|
|||||||
* @param {number} source The source vertex to start BFS.
|
* @param {number} source The source vertex to start BFS.
|
||||||
*/
|
*/
|
||||||
bfs (source, output = value => console.log(value)) {
|
bfs (source, output = value => console.log(value)) {
|
||||||
const queue = []
|
const queue = [[source, 0]] // level of source is 0
|
||||||
const visited = new Set()
|
const visited = new Set()
|
||||||
queue.unshift([source, 0]) // level of source is 0
|
|
||||||
visited.add(source)
|
|
||||||
while (queue.length) {
|
while (queue.length) {
|
||||||
const front = queue[0]
|
const [node, level] = queue.shift() // remove the front of the queue
|
||||||
const node = front[0]
|
if (visited.has(node)) { // visited
|
||||||
const level = front[1]
|
continue
|
||||||
queue.shift() // remove the front of the queue
|
}
|
||||||
|
|
||||||
|
visited.add(node)
|
||||||
output(`Visited node ${node} at level ${level}.`)
|
output(`Visited node ${node} at level ${level}.`)
|
||||||
for (const next of this.adjacencyMap[node]) {
|
for (const next of this.adjacencyMap[node]) {
|
||||||
if (!visited.has(next)) { // not visited
|
queue.push([next, level + 1]) // level 1 more than current
|
||||||
queue.unshift([next, level + 1]) // level 1 more than current
|
|
||||||
visited.add(next)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user