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
- 썸네일 생성
- 맥에서 MSSQL
- substr
- 레벨1
- sort
- map
- 배열 중복 개수 구하기
- AWS EBS
- Azure Data Studio
- MIN
- 프로그래머스
- math
- 레벨2
- 이벤트 중복 발생 현상
- fill
- iscomposing
- mssql
- fluent-ffmpeg
- Filter
- AWS
- reduce
- 객체에서 value만 가져오기
- indexof
- 자바스크립트
- DB 백업 파일 복원
- array
- 삼항연산자
- +연산자
- max
- 리액트
Archives
- Today
- Total
3은로그
백준 1260번 DFS와 BFS 본문
728x90
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(Depth First Search, 깊이우선탐색)
깊이 우선 탐색은 노드의 깊이가 깊은 순서를 먼저 탐색하는 알고리즘이다.
DFS 알고리즘은 인접행렬 자료구조와 재귀 알고리즘을 사용해서 구현한다.
BFS(Breadth First Search, 너비우선탐색)
너비 우선 탐색은 같은 깊이의 노드를 먼저 탐색하는 알고리즘이다.
BFS 알고리즘은 Queue 자료구조를 사용해서 구현한다.
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class P1260_DFS와BFS {
static int[][] branch; //간선 연결 상태
static boolean[] visit; //확인 여부
static int n; //정점개수
static int m; //간선개수
static int start; //시작정점
public static Queue<Integer> queue;
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
n = sc.nextInt(); //정점 개수
m = sc.nextInt(); //간선 개수
start = sc.nextInt(); //시작할 정점의 번호
branch = new int[1001][1001];
visit = new boolean[1001];
//간선 연결 상태 저장하기
for(int i = 0 ; i < m; i++){
int x = sc.nextInt();
int y = sc.nextInt();
branch[x][y] = branch[y][x] = 1;
}
dfs(start);
visit = new boolean[1001]; //bfs를 위해 상태 초기화
System.out.println();
bfs(start);
}
public static void dfs(int start){
visit[start] = true;
System.out.print(start + " ");
for(int i = 1; i <= n; i++){
if(branch[start][i] == 1 && visit[i] == false){
dfs(i);
}
}
}
public static void bfs(int start) {
queue = new LinkedList<Integer>();
queue.add(start);
visit[start] = true;
System.out.print(start + " ");
while (!queue.isEmpty()){
int temp = queue.poll();
for(int i = 1; i <branch.length; i++){
if(branch[temp][i] == 1 && visit[i] == false){
queue.add(i);
visit[i] = true;
System.out.print(i + " ");
}
}
}
}
}
후기
구글링으로 여기저기서 코드 긁어와서 했는데 정말 어렵다.
일단 DFS, BFS 개념부터 다시 정리할 필요가 있을거 같다.
정말 기초가 부족하구나를 코드 한줄 적을때 마다 느낀다.. 반성하세요
'코딩테스트' 카테고리의 다른 글
백준 9076 - 점수집계 (정렬) (0) | 2023.01.06 |
---|---|
백준 23278 - 영화평가 (정렬) (1) | 2023.01.03 |
백준 2178번 미로탐색 (0) | 2022.11.15 |
코딩테스트 2주차 - 완전탐색, 시뮬레이션 백준 풀이 (14889번 스타트와 링크) (0) | 2022.11.01 |
코딩테스트 2주차 - 완전탐색, 시뮬레이션 백준 풀이(2231번 분해합) (0) | 2022.10.10 |