How it works
Traverse a graph breadth-first from a start node using a FIFO queue, visiting nearer nodes first.
Implementation
function graphBfsOp(state, start) { const adjHead = state.adjHead; const adjTo = state.adjTo; const adjNext = state.adjNext; const nodeCount = state.nodeCount; const visited = []; let v = 0; while (v < nodeCount) { visited[v] = 0; v = v + 1; } const queue = []; let head = 0; queue[0] = start; visited[start] = 1; visitNode(start); while (head < queue.length) { const node = queue[head]; head = head + 1; traverseNode(node); let e = adjHead[node]; while (e !== -1) { const nb = adjTo[e]; compareKeys(node, nb); if (visited[nb] === 0) { visited[nb] = 1; queue[queue.length] = nb; linkNodes(node, nb); visitNode(nb); } e = adjNext[e]; } } finish(); }
def graphBfsOp(state, start): adjHead = state.adjHead adjTo = state.adjTo adjNext = state.adjNext nodeCount = state.nodeCount visited = [] v = 0 while (v < nodeCount): visited[v] = 0 v = (v + 1) queue = [] head = 0 queue[0] = start visited[start] = 1 visitNode(start) while (head < queue.length): node = queue[head] head = (head + 1) traverseNode(node) e = adjHead[node] while (e != -1): nb = adjTo[e] compareKeys(node, nb) if (visited[nb] == 0): visited[nb] = 1 queue[queue.length] = nb linkNodes(node, nb) visitNode(nb) e = adjNext[e] finish()
#include <vector> #include <algorithm> void graphBfsOp(int state, int start) { auto adjHead = state.adjHead; auto adjTo = state.adjTo; auto adjNext = state.adjNext; auto nodeCount = state.nodeCount; auto visited = []; auto v = 0; while((v < nodeCount)) { visited[v] = 0; v = (v + 1); } auto queue = []; auto head = 0; queue[0] = start; visited[start] = 1; visitNode(start); while((head < queue.length)) { auto node = queue[head]; head = (head + 1); traverseNode(node); auto e = adjHead[node]; while((e != -1)) { auto nb = adjTo[e]; compareKeys(node, nb); if((visited[nb] == 0)) { visited[nb] = 1; queue[queue.length] = nb; linkNodes(node, nb); visitNode(nb); } e = adjNext[e]; } } finish(); }
public void graphBfsOp(int state, int start) { var adjHead = state.adjHead; var adjTo = state.adjTo; var adjNext = state.adjNext; var nodeCount = state.nodeCount; var visited = []; var v = 0; while((v < nodeCount)) { visited[v] = 0; v = (v + 1); } var queue = []; var head = 0; queue[0] = start; visited[start] = 1; visitNode(start); while((head < queue.length)) { var node = queue[head]; head = (head + 1); traverseNode(node); var e = adjHead[node]; while((e != -1)) { var nb = adjTo[e]; compareKeys(node, nb); if((visited[nb] == 0)) { visited[nb] = 1; queue[queue.length] = nb; linkNodes(node, nb); visitNode(nb); } e = adjNext[e]; } } finish(); }
#include <stdio.h> void graphBfsOp(int state, int start) { var adjHead = state.adjHead; var adjTo = state.adjTo; var adjNext = state.adjNext; var nodeCount = state.nodeCount; var visited = []; var v = 0; while((v < nodeCount)) { visited[v] = 0; v = (v + 1); } var queue = []; var head = 0; queue[0] = start; visited[start] = 1; visitNode(start); while((head < queue.length)) { var node = queue[head]; head = (head + 1); traverseNode(node); var e = adjHead[node]; while((e != -1)) { var nb = adjTo[e]; compareKeys(node, nb); if((visited[nb] == 0)) { visited[nb] = 1; queue[queue.length] = nb; linkNodes(node, nb); visitNode(nb); } e = adjNext[e]; } } finish(); }