
ํ ์ปดํจํฐ๊ฐ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ์ปดํจํฐ์ ๋คํธ์ํธ ์์์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํจํฐ๋ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ฆฌ๊ฒ ๋จ
- [์ ๋ ฅ]
์ฒซ๋ฒ์งธ ์ค: N (์ปดํจํฐ์ ์)
๋์งธ ์ค: M (๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์)
M๊ฐ ์ค: ํ ์์ฉ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ์ ๋ฒํธ ์- [์ถ๋ ฅ]
1๋ฒ ์ปดํจํฐ๊ฐ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ์ ๋, ์ํฅ์ ๋ฐ๋ ์ปดํจํฐ์ ์
// ์
๋ ฅ
7
6
1 2
2 3
1 5
5 2
5 6
4 7
// ์ถ๋ ฅ
4
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// [input]
int N = Integer.parseInt(br.readLine());
// ๊ทธ๋ํ ์ด๊ธฐํ
List<List<Integer>> graph = new ArrayList<>();
for(int i=0; i<=N+1; i++) {
graph.add(new ArrayList<>());
}
// ๊ฐ์ ์
๋ ฅ
int M = Integer.parseInt(br.readLine());
for(int m=0; m<M; m++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v= Integer.parseInt(st.nextToken());
graph.get(u).add(v);
graph.get(v).add(u);
}
// bfs ํ์
Deque<Integer> queue = new ArrayDeque<>();
boolean[] visited=new boolean[N+1];
queue.offer(1);
visited[1]= true;
int count = 0;
while(!queue.isEmpty()) {
int current=queue.poll();
for(int el: graph.get(current)) {
if(!visited[el]) {
visited[el]=true;
count ++;
queue.add(el);
}
}
}
System.out.println(count);
}// main
public class Main_DFS {
static List<List<Integer>> graph;
static boolean[] visited;
static int count =0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// [input]
int N = Integer.parseInt(br.readLine());
// ๊ทธ๋ํ ์ด๊ธฐํ
graph = new ArrayList<>();
for(int i=0; i<=N+1; i++) {
graph.add(new ArrayList<>());
}
// visited ๋ฐฐ์ด
visited = new boolean[N+1];
// ๊ฐ์ ์
๋ ฅ
int M = Integer.parseInt(br.readLine());
for(int m=0; m<M; m++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v= Integer.parseInt(st.nextToken());
graph.get(u).add(v);
graph.get(v).add(u);
}
// dfs ํ์
dfs(1);
System.out.println(count-1);
}// main
public static void dfs(int v) {
visited[v]=true;
++count;
for(int next:graph.get(v)) {
if(!visited[next]) {
dfs(next);
}
}
}
}

DFS & BFS
์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด ๋ ์ ํฉํ๊ฐ?
๋ ์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(V + E)๋ก ๋์ผ
DFS ํ์ ๋ก์ง ์ค๋ฅ
DFS ํจ์์์ for ๋ฃจํ ์์ด ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ง ํ์ํ๋ ์ค์
๊ฒฐ๊ณผ ์นด์ดํธ ์ค๋ฅ
์์์ ์ธ 1๋ฒ ์ปดํจํฐ๋ฅผ ํฌํจํ์ฌ ์นด์ดํ
ํด์ ์ต์ข
๊ฒฐ๊ณผ๊ฐ 1๋งํผ ํฌ๊ฒ ๋์ค๋ ์ค์