가장 기초적인 BFS,DFS 알고리즘이 빠져있었다.
오랜만에 봤는데 기억이 잘 안나서 설명보단 코드를 기재한다.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class BFS_DFS {
static int[][] map;
static boolean[] visit;
static int N = 7;
static int[] edge(int a,int b) {
int[] re = {a,b};
return re;
}
public static void main(String[] args) {
map = new int[7][7];
ArrayList<int[]> edge = new ArrayList<int[]>();
edge.add(edge(0,2));
edge.add(edge(0,3));
edge.add(edge(2,1));
edge.add(edge(2,4));
edge.add(edge(4,5));
edge.add(edge(3,6));
for(int[] tmp:edge) {
map[tmp[0]][tmp[1]] = 1;
map[tmp[1]][tmp[0]] = 1;
}
for(int i = 0 ; i < N ;i++) {
for(int j = 0 ; j < N ; j++) {
System.out.print(map[i][j]+" ");
}
System.out.println();
}
visit = new boolean[N];
System.out.print("dfs: ");
dfs(0);
System.out.println();
visit = new boolean[N];
System.out.print("bfs: ");
bfs(0);
}
static void dfs(int i) {
visit[i] = true;
System.out.print(i + " ");
for (int j = 0; j < N; j++) {
if (map[i][j] == 1 && visit[j] == false) {
dfs(j);
}
}
}
static void bfs(int i) {
Queue<Integer> q = new LinkedList<>();
q.offer(i);
visit[i] = true;
while (!q.isEmpty()) {
int temp = q.poll();
System.out.print(temp + " ");
for (int j = 0; j < N; j++) {
if (map[temp][j] == 1 && visit[j] == false) {
q.offer(j);
visit[j] = true;
}
}
}
}
}
'공부-코딩테스트 > 코테에 도움이 될만한 지식들' 카테고리의 다른 글
DP (0) | 2023.01.17 |
---|---|
LIS문제 -DP (0) | 2022.10.06 |
벨만 포드, 다익스트라, 프로이드 워샬 알고리즘 (0) | 2022.09.28 |
연결된 그래프 합쳐졌는지 체크 (feat. 행성 터널 문제) (0) | 2022.08.21 |
세그먼트 트리 : 구간별로 비교할 경우 (feat. BOJ : 히스토그램에서 가장 큰 직사각형 ) (0) | 2022.08.20 |
댓글