Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Queue
- 프로그래머스 문자열 정렬
- 오름차순 정렬
- Programmers
- 스프링부트 도커 배포
- 클라이언트
- 큐
- 삼각형의 완성조건
- 스프링부트 도커로 배포
- 프로그래머스 자바
- Stack
- 문자열
- 백준
- lv2
- 스프링부트 도커
- 버퍼
- 이진수 변환
- 프로그래머스
- SWEA
- java
- Lv1
- 자바
- COS Pro
- 프로그래머스 풀이
- StringTokenizer
- index of
- 알고리즘
- lv0
- 백준 N과 M 자바
- 스택
Archives
- Today
- Total
mun dev
[백준] 1260 DFS와 BFS 자바 본문
문제설명
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
입력
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.
출력
첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.
✅ 통과한 코드
import java.util.*;
import java.io.*;
public class Main {
static boolean[] visited; //방문처리 배열
static int[][] graph; //그래프의 연결상태
static int n, m, v;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
StringTokenizer st = new StringTokenizer(s, " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
v = Integer.parseInt(st.nextToken());
graph = new int[n + 1][n + 1];
visited = new boolean[n + 1];
for (int j = 1; j <= n; j++) {
Arrays.fill(graph[j], 0);
}
Arrays.fill(visited, false);
for (int i = 1; i <= m; i++) {
String edge = br.readLine();
StringTokenizer st1 = new StringTokenizer(edge, " ");
int a = Integer.parseInt(st1.nextToken());
int b = Integer.parseInt(st1.nextToken());
graph[a][b] = graph[b][a] = 1;
}
dfs(v);
System.out.println();
Arrays.fill(visited,false);
bfs(v);
}
static void dfs(int node) {
visited[node] = true; //방문시 true
//방문노드 출력
System.out.print(node+" ");
//방문한 노드에서 인접한 노드 찾기
for (int i = 1; i <= n; i++) {
//인접한 노드가 방문한적 없다면 dfs 수행
if (graph[node][i] == 1 && visited[i] == false) {
dfs(i);
}
}
}
static void bfs(int node){
Queue<Integer> queue=new LinkedList<>();
queue.offer(node);
visited[node]=true;
while(!queue.isEmpty()){
int tmp= queue.poll();
//처음 방문 위치는 빼주기
System.out.print(tmp+" ");
for(int j=1; j<=n; j++){
if(graph[tmp][j]==1 && visited[j]==false){
queue.offer(j);
visited[j]=true; // true 라면 방문
}
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2003 수들의 합2 자바 (0) | 2023.04.11 |
---|---|
[백준] 2606 바이러스 자바 (0) | 2023.04.05 |
[백준] 9506 약수들의 합 자바 (0) | 2023.03.26 |
[백준] - 1978 소수 찾기 자바 (0) | 2023.03.24 |
[백준] 11724 - 연결 요소의 개수 자바 (0) | 2023.03.19 |