[Java] BFS 구현하기 - 재귀 함수&Queue이용 / 인접 리스트

2023. 9. 2. 19:06·Java

ex)

출처: https://scshim.tistory.com/241

 


                                                                  Code                                                                     

 

import java.io.*;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    static LinkedList<Integer>[] adj;
    static boolean[] visit;
    static Queue<Integer> queue;
    public static void main(String[] args) throws IOException{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

        //정점과 간선 선언 및 저장
        String str = bf.readLine();
        int n = Integer.parseInt(str.split(" ")[0]);
        int m = Integer.parseInt(str.split(" ")[1]);

        queue = new LinkedList<>();

        //t,f판별 배열과 인접 리스트 선언 및 초기화
        visit = new boolean[n+1];
        adj = new LinkedList[n+1];
        for (int i = 0; i<adj.length; i++){
            adj[i] = new LinkedList<>();
        }

        //인접 리스트 값 입력 및 노드에 값 저장
        for (int i = 0; i < m; i++){
            String str2 = bf.readLine();
            int u = Integer.parseInt(str2.split(" ")[0]);
            int v = Integer.parseInt(str2.split(" ")[1]);
            adj[u].add(v);
            adj[v].add(u);
        }

        //t, f판별 후 bfs실행
        for (int i = 1; i<n+1; i++){
            if (!visit[i])  {
                visit[i] = true;
                System.out.print(i + " ");
                bfs(i);
            }
        }
    }

    //bfs함수
    private static void bfs(int i) {
        for (int a:adj[i]) {
            if (!visit[a]) {
                visit[a] = true;
                queue.add(a);
                System.out.print(a + " ");
            }
        }
        if (!(queue.isEmpty())) bfs(queue.poll());
        else return;
    }
}

 


                                                                  결과                                                                      

입력
출력

 

저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[백준] 1920번 수 찾기 - 이진 탐색 알고리즘/ 함수 이용(재귀X)  (0) 2023.09.06
[백준] 2178번 미로 탐색 - BFS / 너비 탐색 알고리즘 / 클래스  (0) 2023.09.05
[백준] 11724번 연결 요소의 개수 - DFS방식 / 재귀 함수 이용/ 무방향 그래프  (0) 2023.09.01
[Java] DFS 구현하기 - 재귀 함수 이용 / 인접 리스트 / 배열  (0) 2023.08.31
[백준] 1517번 버블 소트 - 병합 정렬 / 버블 정렬  (0) 2023.08.31
'Java' 카테고리의 다른 글
  • [백준] 1920번 수 찾기 - 이진 탐색 알고리즘/ 함수 이용(재귀X)
  • [백준] 2178번 미로 탐색 - BFS / 너비 탐색 알고리즘 / 클래스
  • [백준] 11724번 연결 요소의 개수 - DFS방식 / 재귀 함수 이용/ 무방향 그래프
  • [Java] DFS 구현하기 - 재귀 함수 이용 / 인접 리스트 / 배열
미우딩
미우딩
다양한 프로그래밍 언어를 공부하고 있는 공대생입니다! Python, Java, C언어를 주로 공부하고 있으며 Figma를 통한 디자인도 종종 올릴 예정입니다.
  • 미우딩
    미우의 코딩 기록
    미우딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Java (47)
      • C언어 (0)
      • 대외활동 (5)
      • Spring (4)
      • 프로젝트 (2)
      • 앱개발 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    android #java #kotlin #상태관리
    IT #알고리즘 #코딩테스트 #선택정렬 #내림차순정렬 #최댓값
    BufferedReader
    IT #코딩테스트 #알고리즘 #DFS #재귀함수 #무방향그래프
    IT #코딩테스트 #알고리즘 #투포인터 #시간제한 #Scanner #BufferedReader #StringTokenizer
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #아스키코드
    IT #큐 #알고리즘 #코딩테스트 #자바 #선입선출
    IT #코딩테스트 #알고리즘 #백준 #투포인터 #배열
    IT #알고리즘 #그리디알고리즘 #탐욕알고리즘 #코테
    java #android #개발자
    IT #백준 #코딩테스트 #알고리즘 #구간합 #반복문
    IT #코딩테스트 #알고리즘 #슬라이딩윈도우 #투포인터 #함수
    IT #BFS #코딩테스트 #구현 #큐 #재귀함수
    IT #알고리즘 #코딩테스트 #삽입정렬 #오름차순정렬
    IT #알고리즘 #코딩테스트 #퀵정렬 #오름차순정렬
    IT #코딩테스트 #알고리즘 #스택 #
    IT #코딩테스트 #이진탐색 #알고리즘
    IT #코딩테스트 #알고리즘 #버블정렬 #오름차순
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #평균구하기
    android #java #kotlin #compose
    Spring #정적컨텐츠 #MVC #템플릿엔진 #API #애너테이션
    push #pop #StringBuffer
    IT #알고리즘 #코딩테스트 #DFS
    IT #알고리즘 #코딩테스트 #우선순위큐 #힙 #절댓값 #오름차순 #정렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미우딩
[Java] BFS 구현하기 - 재귀 함수&Queue이용 / 인접 리스트
상단으로

티스토리툴바