ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 1260 DFS와 BFS
    Python_알고리즘 2021. 7. 30. 00:53
    문제 바로가기

       문제분석   

    # DFS(Depth First Search) 깊이우선탐색

    • 최상위 노드부터 하위 노드까지 한 길만 깊게 탐색하고 다시 위로 올라가서 다른 노드를 깊게 탐색

    # BFS(Breadth First Search) 너비우선탐색

    • 최상위 노드부터 다음 차수를 모두 탐색하고, 그 다음 차수를 모두 탐색하는 방법

     

     

       문제풀이   

    # Depth First Search
    def dfs(n):
        print(n, end=' ')
        visited[n] = True
        for i in graph[n]:
            if not visited[i]:
                dfs(i)
    
    # Breadth First Search
    def bfs(n):
        visited[n] = True
        queue = deque([n])
        while queue:
            v = queue.popleft()
            print(v, end= ' ')
            for i in graph[v]:
                if not visited[i]:
                    queue.append(i)
                    visited[i] = True
    
    import sys
    from collections import deque
    
    # node, branch, first node
    n, m, v = map(int, sys.stdin.readline().split())
    # adjacency list
    graph = [[] for _ in range(n+1)]
    # check list
    visited = [False] * (n + 1)
    
    # make adjacency lsit
    for _ in range(m):
        a, b = map(int, sys.stdin.readline().split())
        graph[a].append(b)
        graph[b].append(a)
    # sort adjacency list
    for i in range(1, n+1):
        graph[i].sort()
    
    dfs(v)
    # initialize check list
    visited = [False] * (n + 1)
    print()
    bfs(v)

    # DFS와 BFS함수를 생성한다.

    • DFS는 스택과 재귀함수를 이용해 구현하고, BFS는 deque를 이용해 구현한다.

    # 입력값으로 n(정점의 개수), m(간선의 개수), v(탐색을 시작할 정점의 번호)를 받는다.

    # 인접 행렬을 반복문을 통해 만든다.

    # 방문한 곳을 체크하기 위한 배열을 선언한다.

    # 간선의 개수만큼 반복문을 돌리는데

    • 간선이 연결하는 두 정점의 번호를 입력받고
    • 각가 그래프 a에 b를, b에 a를 추가한다.

    # 1부터 정점의 개수만큼 그래프를 sort하고 최상위 노드를 호출해 함수를 실행하도록 한다.

    # 방문리스트는 false로 초기화 해놓고 함수를 통해 방문한 노드가 나올때마다 true로 바꿔준다.

     

     

     

     

    몬말이지....?;;

     

    'Python_알고리즘' 카테고리의 다른 글

    [Python] 백준 15650 N과 M (2)  (0) 2021.08.03
    [Python] 백준 2108 통계학  (0) 2021.07.31
    [Python] 백준 1874 스택 수열  (0) 2021.07.27
    [Python] 백준 4949 균형잡힌 세상  (0) 2021.07.24
    [Python] 백준 1010 다리 놓기  (0) 2021.07.24

    댓글

Designed by Tistory.