• 티스토리 홈
  • 프로필사진
    Cat_Code
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Cat_Code
  • 프로필사진
    Cat_Code
    • 분류 전체보기 (114) N
      • [네이버 부스트캠프] (46)
        • ⭐주간 학습 정리 (43)
        • 🎶추가 학습 정리 (3)
      • [연습의 흔적들] (27)
        • 백준⚾ (26)
        • 캐글 & 데이콘 🤝 (1)
      • [ML] (23) N
        • 머신러닝 💕 (5)
        • 딥러닝 🔫 (10)
        • 데이터 분석 🖤 (1)
        • 수학 ☑️ (4)
        • LLM🦜 (3) N
      • [CS] (14)
        • 파이썬 🖤 (10)
        • 해체 분석기📝 (3)
        • Service Product (1)
        • MultiMedia (0)
      • [개발일지] (2)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [백준] 1260번 DFS와 BFS 파이썬(Python) 풀이
        2022년 10월 24일
        • Cat_Code
        • 작성자
        • 2022.10.24.:10
         

        1260번: DFS와 BFS

        첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

        www.acmicpc.net

        [문제]


        [코드]

        n, M, v = map(int, input().split())
        
        #인접한
        m = [[0] * (n+1) for i in range(n+1)]
        
        #방문
        visited = [0] * (n+1)
        
        for i in range(M):
            a, b = map(int, input().split())
            m[a][b] = m[b][a] = 1
        
        #dfs
        def dfs(v):
            visited[v] = 1
            print(v, end=' ')
        
            #재귀 함수 선어 (v와 인접한 곳을 찾고 방문하지 않았다면 시행)
            for i in range(1, n+1):
                if visited[i] == 0 and m[v][i] ==1:
                    dfs(i)
        
        def bfs(v):
            #방문해야할 곳을 순서대로 넣을 큐
            queue = [v]
        
        
            #dfs를 완료한 visited배열(1로 되어있음)에서 0으로 방문 체크
            visited[v] = 0
        
            while queue:
                v = queue.pop(0)
                print(v, end=' ')
                for i in range(1, n+1):
                    if visited[i] == 1 and m[v][i] == 1:
                        queue.append(i)
                        visited[i] = 0
        
        dfs(v)
        print()
        bfs(v)

        [해설]

        bfs와 dfs를 활용하는 기초적인 문제이다.

        dfs의 경우에는 쉽게 구현하고 이해 할 수 있었지만 bfs를 이해하려면 약간의 노력이 필요했다. 

        자세한 내용은 아래 블로그 참조 💕

         

        파이썬과 컴퓨터 사이언스(고급 알고리즘): 깊이 우선 탐색 (DFS) - 잔재미코딩

        3. DFS 알고리즘 구현¶ 자료구조 스택과 큐를 활용함 need_visit 스택과 visited 큐, 두 개의 자료 구조를 생성 BFS 자료구조는 두 개의 큐를 활용하는데 반해, DFS 는 스택과 큐를 활용한다는 차이가 있

        www.fun-coding.org

        DFS와 BFS란?

        DFS는 깊이 우선 탐색이며 

        BFS는 너비 우선 탐색이다 

        아래의 그림을 보면 이해하기가 더 쉽다

         

        BFS의경우 A가 시작점이라고 한다면 A와 연결된 B,C를 탐색하고 -> D로가서 G,H,I를 탐색한다

        그리고 E로가서 F, J를 탐색하는 방법이다

         

        반면 DFS의 경우 A가 시작점이라고 한다면 A와 연결된 B , B와 연결된 D, D와 연결된 E를 탐색하고 다시 D와 연결된 F, 그리고 C로 돌아가 G , H, I를 탐색하고 마지막으로 I와 연결된 J를 탐색한다

         

        정리하자면 BFS의경우

        A - B - C - D - G - H -I -E F J의 순서로

         

        DFS의경우 A - B - D - E - F - C - G - H - I - J 순서이다

         

         

        추가적으로 파이썬으로 구현해본 BFS 코드 

        from collections import deque
        
        #BFS 함수 정의
        def bfs(graph, start, visited):
            #큐 구현을 위해서 deque 라이브러리 이용
            queue = deque([start])
            #현재 노드 망문 저리
            visited[start] = True
            #큐가 빌 때까지 반복
            while queue:
                #큐 에서 한의 원소를 뽑아서  출력
        
                v = queue.popleft()
                print(queue)
                #print(v, end=' ')
                #해당 원소와 연결된 , 아직 방문하지 않은 원소들을 큐에 삽입
                for i in graph[v]:
                    if not visited[i]:
                        queue.append(i)
                        visited[i] = True
        
        
        
        graph = [
          [],
          [2, 3, 8],
          [1, 7],
          [1, 4, 5],
          [3, 5],
          [3, 4],
          [7],
          [2, 6, 8],
          [1, 7]
        ]
        
        visited = [False] * 9
        bfs(graph, 1, visited)

        '[연습의 흔적들] > 백준⚾' 카테고리의 다른 글

        [백준] 11724번 연결 요소의 개수 파이썬(Python) 풀이  (0) 2022.10.31
        [백준] 1012번 유기농 배추 파이썬(Python) 풀이  (0) 2022.10.26
        [백준] 1021번 회전하는 큐 파이썬(Python) 풀이  (0) 2022.10.22
        [백준] 2108번 통계학 파이썬(Python) 풀이  (0) 2022.10.20
        [백준] 14501번 퇴사 파이썬(Python) 풀이🚩  (0) 2022.10.19
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바