728x90
import java.io.*;
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int v = Integer.parseInt(st.nextToken()); // 정점
int e = Integer.parseInt(st.nextToken()); // 간선
int start = Integer.parseInt(st.nextToken()); // 시작점
int[][] a = new int[v+1][v+1];
boolean[] visited = new boolean[v+1];
for(int i = 0 ; i < e ; i++)
{
StringTokenizer st2 = new StringTokenizer(br.readLine());
int row = Integer.parseInt(st2.nextToken());
int column = Integer.parseInt(st2.nextToken());
a[row][column] = 1; // 연결되어있다는 의미
a[column][row] = 1; // 무방향
}
dfs(a, visited, start);
for(int i = 0 ; i < visited.length ; i++)
visited[i] = false;
sb.append("\n");
bfs(a, visited, start);
System.out.print(sb);
}
static void dfs(int[][] a, boolean[] visited, int start)
{
visited[start] = true; // 시작한 곳부터 방문했다고 표시
sb.append(start + " "); // 시작한 곳 출력
for(int i = 0 ; i < a.length ; i++) // 연결되어있는 간선 체크
{
if(a[start][i] == 1 && visited[i] == false) // 연결되어있고 방문을 안했다면
dfs(a, visited, i);
}
}
static void bfs(int[][] a, boolean[] visited, int start)
{
Queue<Integer> q = new LinkedList<>();
q.add(start);
visited[start] = true;
while(!q.isEmpty())
{
start = q.poll();
sb.append(start + " ");
for (int i = 0; i < a.length; i++)
{
if (a[start][i] == 1 && visited[i] == false)
{
q.add(i);
visited[i] = true;
}
}
}
}
}
728x90
'코딩 테스트' 카테고리의 다른 글
백준 2231번 분해합(자바,java,JAVA) (0) | 2023.01.11 |
---|---|
백준 15740번 A+B - 9(자바,java,JAVA) (0) | 2023.01.11 |
백준 18429번 근손실(자바,java,JAVA) (0) | 2023.01.11 |
백준 1406번 에디터(자바,java,JAVA) (0) | 2023.01.11 |
2577번 숫자의 개수(자바, java) - 백준 문제풀이 (0) | 2023.01.11 |