티스토리 뷰

function connectedVertices(edges) {
const graph = {};
for (let [from, to] of edges) {
if (!graph[from]) graph[from] = [];
if (!graph[to]) graph[to] = [];
graph[from].push(to);
graph[to].push(from);
}

const visited = {};
let count = 0;

const dfs = (node) => {
visited[node] = true;
for (let neighbor of graph[node]) {
if (!visited[neighbor]) {
dfs(neighbor);
}
}
};
//인자로 받은 node에서 시작하여 DFS 탐색을 수행하고, 방문한 정점을 visited 객체에 기록

for (let node in graph) {
if (!visited[node]) {
dfs(node);
count++;
}
}
//모든 정점을 순회하면서 방문하지 않은 정점에서 DFS 탐색을 시작
//이때, 탐색을 시작한 정점이 연결 요소의 한 부분
return count;
}

ex)

[0, 1],
[2, 3],
[4, 5],

graph 객체

{
  0: [1],
  1: [0],
  2: [3],
  3: [2],
  4: [5],
  5: [4]
}

dfs(0)이 호출

visited[0]true로 설정

graph[0]는 1로 1이 방문되지 않는 정점으로

dfs(1)이 호출

dfs(1)에서 visited[1]는 true로 설정

 

dfs(0)으로 돌아와 graph[0]의 모든 정점을 방문했으므로 다음 정점인 2로 넘어간다.

 

dfs(2)가 호출

visited[2]true로 설정

graph[2]는 3로 3이 방문되지 않은 정점이므로

dfs(3)이 호출

dfs(3)에서 visited[3]true로 설정

 

dfs(2)으로 돌아와 graph[2]의 모든 정점을 방문했으므로 다음 정점인 4로 넘어간다.

 

dfs(4)가 호출

dfs(4)에서 visited[4]true로 설정

graph[4]에서 5이 방문되지 않은 정점이므로

dfs(5)이 호출

dfs(5)에서 visited[5]true로 설정

 

count는 3이 된다.

 

 

 

'codestates > section4' 카테고리의 다른 글

과제 반응형 웹사이트  (0) 2023.03.16
Unit2 - [HTML/CSS] 심화  (1) 2023.03.16
인접 행렬 길찾기  (0) 2023.03.16
이진트리 후위 순회  (0) 2023.03.15
Implementation Graph  (0) 2023.03.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함