📝문제 설명
무방향 그래프 탐색 문제이다. 이 문제는 bfs, dfs 두 가지 방법으로 풀어 보겠다.
📢입출력 예시
- 정점의 수 : 7개
- 간선의 수 : 6개
- 1번 컴퓨터를 통해 바이러스 걸리는 컴퓨터 수 : 4개
✏️문제 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Baek2606 {
static boolean[] visited;
static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
static int N, M, count;
public static void main(String[] arg) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
M = Integer.parseInt(br.readLine());
visited = new boolean[N+1];
for(int i=0; i<N+1; i++){
graph.add(new ArrayList<>());
}
for(int i=0; i<M; i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
graph.get(x).add(y);
graph.get(y).add(x);
}
DFS(1) or BFS(1);
System.out.println(count);
}
}
BFS
private static void BFS(int v){
Queue<Integer> queue = new LinkedList<>();
queue.offer(v);
visited[v] = true;
while(!queue.isEmpty()){
int node = queue.poll();
for(int i=0; i<graph.get(node).size(); i++){
int temp = graph.get(node).get(i);
if(!visited[temp]) {
visited[temp] = true;
queue.offer(temp);
count++;
}
}
}
}
DFS
private static void DFS(int v){
if(!visited[v]){
visited[v] = true;
}
for(int i=0; i<graph.get(v).size(); i++){
int node = graph.get(v).get(i);
if(!visited[node]){
DFS(node);
count++;
}
}
}
💡새로 알게된 점
2중 리스트를 사용할 때
static ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
여기에 값을 넣기 전에 이 리스트를 초기화 해야된다는 걸 알았다!!
for(int i=0; i<N+1; i++){
graph.add(new ArrayList<>());
}
'📖Algorithm > DFS & BFS' 카테고리의 다른 글
JAVA [Algorithm] - 백준 2178 미로 탐색 (2) | 2024.12.14 |
---|---|
JAVA [Algorithm] - 백준 2667 단지번호 붙이기 (0) | 2024.12.14 |
C++ [Algorithm] - 백준 11724 연결 요소의 개수 (0) | 2024.08.05 |
C++ [Algorithm] - 백준 24479 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2024.08.02 |
C++ [Algorithm] - 백준 10026 적록색약 (0) | 2024.08.02 |