본문 바로가기

알고리즘 문제풀이/백준

[백준][JAVA] 1260 : DFS와 BFS

문제 출처 : https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

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

www.acmicpc.net

 

 

 

문제

 

 

 

설명

DFS와 BFS를 배운 직후에, 제대로 코드를 익혔는지 확인용으로 풀어봤습니다.

인접 행렬에 입력값들을 차례대로 넣은 다음에(양방향 그래프임에 주의해야 합니다!) 차례대로 DFS와 BFS를 구현해 줬습니다.

 

 

 

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BOJ1260_DfsBfs {
	
	static class Node{
		int vertex;
		Node link;
		public Node(int vertex, Node link) {
			super();
			this.vertex = vertex;
			this.link = link;
		}
	}
	
	static boolean[][] matrix;
	static int N, M, V;
	
	public static void main(String[] args) throws Exception {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken()); //정점의 갯수
		M = Integer.parseInt(st.nextToken()); //간선의 갯수
		V = Integer.parseInt(st.nextToken()); //탐색을 시작할 정점 번호
		matrix= new boolean[N+1][N+1]; //노드 번호는 1번부터 시작
		
		for(int i=0; i<M; i++) {
			st= new StringTokenizer(br.readLine());
			int from = Integer.parseInt(st.nextToken());
			int to = Integer.parseInt(st.nextToken());
			matrix[from][to] = matrix[to][from] = true;
		} //양방향 그래프 입력 완료
		
		boolean visited[] = new boolean[N+1];
		dfs(V, visited);
		System.out.println();
		bfs();
		
	}

	private static void dfs(int cur, boolean[] visited) {
		
		visited[cur]=true;
		System.out.print(cur + " ");
		
		for(int i=1; i<=N; i++) {
			if(!visited[i] && matrix[cur][i])
				dfs(i, visited);
		}
	}

	private static void bfs() {
		Queue<Integer> q = new LinkedList<>();
		boolean visited[] = new boolean[N+1];
		
		q.add(V);
		visited[V]=true;
		
		while(!q.isEmpty()) {
			
			int cur = q.poll();
			System.out.print(cur + " ");
			
			for(int i=1; i<=N; i++) {
				if(!visited[i] && matrix[cur][i]) {
					q.add(i);
					visited[i]=true;
				}
			}
		}
	}
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준][BOJ] 2606 : 바이러스  (0) 2021.10.03
[백준][JAVA] 15900 : 나무 탈출  (0) 2021.10.03
[BOJ][JAVA] 11866 - 요세푸스 문제 0  (0) 2021.09.22
[BOJ][JAVA] 10773 - 제로  (0) 2021.09.22
[BOJ][JAVA] 7568 - 덩치  (0) 2021.09.21