[알고리즘] 1260. DFS와 BFS

2024. 2. 25. 22:45Algorithm/with Java

0. 문제

 

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 


1. 문제 이해

 

  1. BFS
  2. DFS
  3. 정렬

 


2. 제출

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;

public class BOJ1260 {

	static int N, M, V;
	static List<Integer>[] lists; 
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuffer sb = new StringBuffer();
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		V = Integer.parseInt(st.nextToken());
		
		// 인접 행렬
		lists = new List[N+1];
		for(int i=0; i<=N; i++) {
			lists[i] = new ArrayList<Integer>();
		}

		int from, to;
		for(int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine());
			from = Integer.parseInt(st.nextToken());
			to = Integer.parseInt(st.nextToken());
			// 양방향 간선
			lists[from].add(to);
			lists[to].add(from);
		}
		// 연결된 노드들을 오름차순으로 정렬
		for(List<Integer> list : lists) {
			Collections.sort(list);
		}
		
		dfs(V, new boolean[N+1], sb);
		sb.append("\\n");
		bfs(V, sb);
		System.out.println(sb);

		br.close();
	}
	
	static void dfs(int idx, boolean[] vis, StringBuffer sb) {
		vis[idx] = true;
		sb.append(idx).append(" ");

		for(Integer next : lists[idx]) {
			if(vis[next]) continue;
			dfs(next, vis, sb);
		}
	}

	static void bfs(int idx, StringBuffer sb) {
		Queue<Integer> q = new ArrayDeque<Integer>();
		boolean[] vis = new boolean[N+1];
		q.offer(idx);
		vis[idx] = true;

		int cur;
		while(!q.isEmpty()) {
			cur = q.poll();
			sb.append(cur).append(" ");
			
			for(Integer i : lists[cur]) {
				if(vis[i]) continue;
				q.offer(i);
				vis[i] = true;
			}
		}
	}

}

 


'Algorithm > with Java' 카테고리의 다른 글

[Java] 서로소 집합  (0) 2024.02.25
[알고리즘] 풀었던 문제 (240220 ~ 22)  (0) 2024.02.25
[알고리즘] 2252. 줄 세우기  (0) 2024.02.25
[Java] 그래프  (0) 2024.02.25
[알고리즘] 풀었던 문제 (240213 ~ 16)  (0) 2024.02.19