Cont - 초기화 - D2TP
TP[i] 하나하나가 ArrayList<>이므로 for문으로 sort해줘야 한다
DFS
pairing
- divergence
- phaser
now + connected
진입시 phaser 체크됨
BFS는 DFS와 여러 차이점이 있는데
- 재귀가 아닌 Field필요하여 Queue 생성
- 처음 진입한 것은 sP로 별도 인식
나오는 now와 들어가는 connected를 pairing함
- 진입할때 phaser 체크됨
import java.util.*;
public class Main {
static ArrayList<Integer>[] TP;
static boolean[] visited;
public static void main(String[] args) {
// ISC
Scanner sc = new Scanner(System.in);
int V = sc.nextInt();
int E = sc.nextInt();
int sP = sc.nextInt();
// D2TP
TP = new ArrayList[V+1];
for (int i = 1; i <= V; i++) {
TP[i] = new ArrayList<>();
}
for (int i = 1; i <= E; i++) {
int s = sc.nextInt();
int e = sc.nextInt();
TP[s].add(e);
TP[e].add(s);
}
for (int i = 1; i <= V; i++) {
Collections.sort(TP[i]);
}
// OP
visited = new boolean[V+1];
DFS(sP);
System.out.println();
visited = new boolean[V+1];
BFS(sP);
}
// EM
static void DFS(int now) {
System.out.print(now + " ");
visited[now] = true;
for (int connected : TP[now]) {
if (!visited[connected])
DFS(connected);
}
}
static void BFS(int sP) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(sP);
visited[sP] = true;
while(!queue.isEmpty()) {
int now = queue.poll();
System.out.print(now + " ");
for (int connected : TP[now]) {
if (!visited[connected]) {
visited[connected] = true;
queue.offer(connected);
}
}
}
}
}
'Hard deck > reindexing d1' 카테고리의 다른 글
064 : 최소 신장 트리 구하기 (0) | 2023.06.14 |
---|---|
053 : 줄 세우기 (1) | 2023.06.14 |
036 : 최솟값을 만드는 괄호 배치 찾기 (1) | 2023.06.13 |
034 : 수를 묶어서 최댓값 만들기 (2) | 2023.06.13 |
033 : 카드 정렬하기 (7) | 2023.06.13 |