#1. 문제
#2. 풀이
1. 깊이 우선 탐색
DFS(깊이 우선 탐색)은 그래프의 모든 정점을 탐색하는 방법 중 하나입니다. DFS는 출발 정점으로부터 더 이상 확장 불가능한 단말 노드까지 우선 탐색하는 방법입니다. 일반적으로, DFS는 재귀 호출 혹은 스택을 활용하여 구현합니다.
2. 모든 정점을 시작 정점으로 하여 DFS를 수행합니다!
- 주어진 2차원 벡터(computers)를 그래프로 가정하고, 각 컴퓨터를 시작 정점으로 하는 DFS를 수행합니다.
- 이때, DFS 수행 과정에서 각 컴퓨터의 방문여부를 체크해, 중복 방문을 방지해 줍니다.
#3. 코드
/*
@문제 : 네트워크를 형성하는 경로의 개수
@설명
1. 각 정점에 대하여 깊이 우선 탐색을 수행합니다.
2. 각 정점을 기준으로 깊이 우선 탐색을 수행하며 방문한 정점에 대하여 방문 여부를 체크합니다.
2. 방문 여부가 참인 정점은 이후 탐색 작업에서 제외되며, 다른 네트워크를 찾아냅니다.
*/
#include <string>
#include <vector>
using namespace std;
int network;
vector<bool> visited;
void dfs(int cur, vector<vector<int>> &graph)
{
visited[cur] = true;
for (int i = 0; i < (int)graph.size(); ++i)
{
if (i == cur)
continue;
if (graph[cur][i] != 0 && !visited[i])
{
dfs(i, graph);
}
}
}
int solution(int n, vector<vector<int>> computers)
{
visited.resize(n, false);
for (int i = 0; i < n; ++i)
{
if (!visited[i])
{
dfs(i, computers);
network++;
}
}
return network;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers]#Level2_방문 길이, 미로 찾기 유형, BFS, 너비 우선 탐색 (0) | 2024.04.17 |
---|---|
[Programmers]#Level2_게임 맵 최단 거리, 미로 찾기 유형, 최단 경로 알고리즘, BFS, 너비 우선 탐색 (0) | 2024.04.15 |
[Programmers]#Level2_더 맵게, 우선순위 큐, 최소 힙 (0) | 2024.04.14 |
[Programmers]#Level2_전화번호 목록, 해시 자료구조, us 컨테이너, 트라이 검색 트리 (0) | 2024.04.14 |
[Programmers]#Level2_[1] 뉴스 클러스터링, map 컨테이너 (0) | 2024.04.08 |