티스토리 뷰

알고리즘/백준

백준1260[nodejs] DFS와 BFS

민트초코수장 2021. 2. 3. 23:44

const readline = require("readline");

let arr = [];
let dfsVisited = [];
let bfsVisited = [];
let dfsResult = [];
let bfsResult = [];
let input = [];
// readline안에서는 배열을 let으로 선언

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => input.push(line.trim())).on("close", () => {
  const [n, m, v] = input[0].split(" ").map(Number);
  input = input.slice(1);
  arr = Array.from(Array(n + 1), () => Array(n + 1).fill(0));
  for (let i of input) {
    let [x, y] = i.split(" ").map(Number);
    arr[x][y] = arr[y][x] = 1;
  }
  //입력값
  
  dfsVisited = new Array(n + 1).fill(false);
  bfsVisited = new Array(n + 1).fill(false);
  //방문한 기록 넣는 배열에 false로 값을 채워둠
  
  
  bfs(v);
  dfs(v);
  console.log(dfsResult.join(" "));
  console.log(bfsResult.join(" "));
});

//인접행렬을 이용한 dfs 구현
function dfs(v) {
  //방문한 곳을 true로 값을 바꿈
  dfsVisited[v] = true;
  dfsResult.push(v);
  for (let i in arr) {
    if (arr[v][i] === 1 && !dfsVisited[i]) {
      dfs(i);
    }
  }
}

//큐로 bfs 구현
function bfs(v) {
  const queue = [];
  queue.push(v);
  bfsResult.push(v);
  while (queue.length) {
    let v = queue.shift();
    bfsVisited[v] = true;
    for (let i in arr) {
      if (arr[v][i] === 1 && !bfsVisited[i]) {
        bfsVisited[i] = true;
        bfsResult.push(i);
        queue.push(i);
      }
    }
  }
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 7576 [nodejs] 토마토  (0) 2021.02.04
백준2178[nodejs] 미로 탐색  (0) 2021.02.04
백준1012[nodejs]유기농 배추  (0) 2021.02.04
백준2667[nodejs]단지번호붙이기  (0) 2021.02.04
백준2606[nodejs] 바이러스  (0) 2021.02.04
Comments