Breadth-first search

너비 우선 탐색

Visit nodes by distance from the start using a FIFO queue.

···
html
<div class="v"><header><b>BREADTH-FIRST SEARCH</b><span id="state"></span></header><main><div class="levels" id="levels"></div><div class="queue" id="queue"></div></main><footer>A → B,C → D,E,F</footer></div>
css
.v{width:min(92vw,660px);height:min(86vh,310px);box-sizing:border-box;padding:clamp(9px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);display:flex;flex-direction:column;gap:7px;color:var(--fg);font:500 clamp(15px,4.5vmin,19px)/1.25 var(--font-sans, sans-serif)}.v header,.v footer{display:flex;justify-content:space-between;align-items:center;gap:8px;white-space:nowrap}.v header b{color:var(--accent);font-size:.9em}.v header span,.v footer{color:var(--muted);font-size:.82em}.v main{flex:1;min-height:0;position:relative;overflow:hidden}.v .mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.v .active{background:var(--accent)!important;color:var(--bg)!important;border-color:var(--accent)!important}.v .muted{opacity:.45} .levels{height:calc(100% - 24px);display:flex;justify-content:center;align-items:center;gap:7px}.level{display:flex;flex-direction:column;justify-content:center;gap:2px}.level b{width:clamp(22px,2.5vw,34px);height:clamp(22px,2.5vw,34px);border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;font:700 .8em ui-monospace,monospace}.queue{position:absolute;left:0;right:0;bottom:0;height:22px;display:grid;place-items:center;text-align:center;color:var(--muted);font:600 .8em ui-monospace,monospace}
js
let n=0;const layers=[["A"],["B","C"],["D","E","F"]];function draw(){document.getElementById("levels").innerHTML=layers.map((l,i)=>"<div class=level>"+l.map(x=>"<b class=\""+(i===n?"active":i>n?"muted":"")+"\">"+x+"</b>").join("")+"</div>").join("");document.getElementById("queue").textContent="FIFO queue: "+layers[(n+1)%3].join("  ");document.getElementById("state").textContent="distance "+n;n=(n+1)%3}draw();setInterval(draw,1000)

Breadth-first search enqueues a start node, removes nodes from the front, and appends unvisited neighbors. It finishes one distance layer before the next.

In an unweighted graph, first arrival gives a shortest path by edge count. Without a visited set, cycles can re-enqueue the same node indefinitely.

When to use

Use it to find minimum hop counts or explore a graph by layers.

Open as page ↗