코딩연습

[백준 알고리즘] Node.js 24444. 알고리즘 수업 - 너비 우선 탐색 1

니 뽀 2023. 6. 15. 13:21

1. 문제

https://www.acmicpc.net/problem/24444

 

24444번: 알고리즘 수업 - 너비 우선 탐색 1

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양방

www.acmicpc.net

 

2. 풀이

const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,m,r] = inputs.shift().split(' ').map(v => +v);

const numMap = new Map();
inputs.forEach(v => {
  let [a,b] = v.split(' ').map(vv => +vv);

  if(numMap.has(a)) numMap.get(a).push(b); 
  else numMap.set(a, [b])
  
  if(numMap.has(b)) numMap.get(b).push(a);
  else numMap.set(b, [a])
})

const visited = new Array(n + 1).fill(0);
const queue = [];
let count = 1;

queue.push(r);
visited[r] = 1;

while(queue.length){
  const t = queue.shift();
  const nodes = numMap.get(t).sort((a,b) => a-b);

  for(let node of nodes){
    if(visited[node] === 0){
      visited[node] = ++count;
      queue.push(node)
    }
  }
}

console.log(visited.slice(1).join('\n'))

- map 형태로 그래프를 만들었다. 이후 queue를 이용하여 방문한 곳에 count를 해주었다.

 

3. 정리

- 아직 bfs에 대한 부분의 이해도가 부족하다.