문제 출처 : 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 |