https://www.acmicpc.net/problem/9372
코드설명
그래프문제에 DFS를 활용하여 모든 국가를 방문하면됩니다.
일반적인 그래프 알고리즘과 DFS를 활용하여 진행한다면 풀수 있습니다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { public static int T, N, M; public static int[] arr; public static ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>(); public static boolean[] visited; public static int answer = 0; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); T = Integer.parseInt(st.nextToken()); for(int i=0;i<T;i++) { st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); graph = new ArrayList<ArrayList<Integer>>(); for(int j=0;j<=N;j++) { graph.add(new ArrayList<>()); } visited = new boolean[N+1]; for(int j=0;j<M;j++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); graph.get(a).add(b); graph.get(b).add(a); } answer = 0; visited[1] = true; simulate(1); System.out.println(answer); } } public static void simulate(int start) { boolean Flag = false; for(int i=1;i<=N; i++) { if(visited[i] == false) { Flag = true; } } if(Flag == false) return ; for(int i=0; i<graph.get(start).size();i++) { int newIdx = graph.get(start).get(i); if(visited[newIdx] == false) { visited[newIdx] = true; answer += 1; simulate(newIdx); } } } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 108710 피보나치 수 5 - DP JAVA (0) | 2023.08.16 |
---|---|
[백준] 14891 톱니바퀴 - 구현 + 시뮬레이션 JAVA (0) | 2023.08.15 |
[백준] 1027 고층 건물 - 구현(Implementation) + 기하학(Geometry) JAVA (0) | 2023.08.12 |
[백준] 9935 문자열 폭발 - StringBuilder + 아이디어 JAVA (0) | 2023.08.12 |
[백준] 1987 알파벳 - Backtracking(백트래킹) + DFS(깊이우선탐색) + HashSet(해시셋) JAVA (0) | 2023.08.12 |