์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฐฑ์ค€ 1260] DFS์™€ BFS (Javascript)

์€์ง„ 2021. 8. 3. 13:15

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ๋งํฌ

[๋ฐฑ์ค€ 1260] DFS์™€ BFS (Javascript))
๋ฐฑ์ค€


โœ๏ธIdea Sketch

2021-07-30

1. ๋ฐฑ์ค€ ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ

const fs = require('fs');
const stdin = (process.platform === 'linux'
  ? fs.readFileSync('/dev/stdin').toString()  // ๋ฐฑ์ค€์— ์ฝ”๋“œ ์ œ์ถœํ–ˆ์„ ๋•Œ
  : `5 5 3
5 4
5 2
1 2
3 4
3 1`  // IDE์—์„œ ์‹คํ–‰ํ•  ๋•Œ
).split('\n');

2. ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ์ •์˜ํ•˜๊ธฐ

let graph = Array.from({ length: n + 1 }, (v) => (Array.from({ length: n + 1 }, v => 0)));
for (let i = 1; i <= m; i++) {
  let [n1, n2] = stdin[i].split(' ').map(Number)
  graph[n1][n2] = 1
  graph[n2][n1] = 1
}

3. DFS๋Š” ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„, BFS๋Š” while๋ฌธ์œผ๋กœ ๊ตฌํ˜„


โœ๏ธ์†Œ์Šค์ฝ”๋“œ

2021-07-30

const fs = require('fs');
const stdin = (process.platform === 'linux'
  ? fs.readFileSync('/dev/stdin').toString()
  : `5 5 3
5 4
5 2
1 2
3 4
3 1`
).split('\n');  // ํ…Œ์ผ€

let [n, m, start] = stdin[0].split(' ').map(Number);

let graph = Array.from({ length: n + 1 }, (v) => (Array.from({ length: n + 1 }, v => 0)));
for (let i = 1; i <= m; i++) {
  let [n1, n2] = stdin[i].split(' ').map(Number)
  graph[n1][n2] = 1
  graph[n2][n1] = 1
}

const DFS = (start) => {
  let result = []
  let visited = Array.from({ length: n + 1 }, v => 0);

  const recursion = (v) => {
    visited[v] = 1
    result.push(v)

    for (let i = 0; i < n + 1; i++) {
      if (graph[v][i] && !visited[i]) recursion(i)
    }
  }

  recursion(start)
  return result;
}

const BFS = (v) => {
  let result = []
  let visited = Array.from({ length: n + 1 }, v => 0);

  let queue = []
  queue.push(v)

  while (queue.length) {
    let v = queue.shift()
    visited[v] = 1
    result.push(v)

    for (let i = 0; i < n + 1; i++) {
      if (graph[v][i] && !visited[i]) {
        queue.push(i)
        visited[i] = 1
      }
    }
  }

  return result;
}

console.log(DFS(start).join(' '))
console.log(BFS(start).join(' '))