본문 바로가기
코딩 테스트

백준 1260번 DFS와 BFS(자바,java,JAVA)

by 주용사 2023. 1. 11.
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