알고리즘
                
              [BOJ] 1260번 : DFS와 BFS (JAVA)
                애용쓰
                 2023. 1. 26. 23:58
              
                          
            https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
import java.io.*;
import java.util.*;
public class hy {
    static Queue<Integer> queue = new LinkedList<>();
    static int N, M, V;
    static boolean[][] map;
    static boolean[] visited;
    static void dfs(int x){
        if(visited[x]) return;
        visited[x]=true; //방문체크
        System.out.print(x+" ");
        for(int i=1;i<=N;i++){
            if(!visited[i]&&map[i][x]&&map[x][i]){
                dfs(i);
            }
        }
    }
    static void bfs(int x){
        visited[x]=true;
        while(!queue.isEmpty()){
            int tmp = queue.poll();
            System.out.print(tmp+" ");
            for(int i=1;i<=N;i++){
                if(!visited[i]&&map[i][tmp]&&map[tmp][i]){
                    queue.add(i);
                    visited[i]=true;
                }
            }
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        V = Integer.parseInt(st.nextToken());
        map = new boolean[N+1][N+1];
        visited = new boolean[N+1];
        for(int i=0;i<M;i++){
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            map[x][y]=true;
            map[y][x]=true;
        }
        //dfs
        dfs(V);
        System.out.println();
        //bfs
        queue.add(V);
        for(int i=0;i<=N;i++){
            visited[i]=false;
        }
        bfs(V);
    }
}
인접행렬은 대각선 기준 대칭이기 때문에 열이나 행 하나만 검사해도 될 것 같다.
DFS, BFS 기본중에 기본인 문제지만 못 풀던 문제를 풀어내서 기분이 좋다 ! 캬캬