코딩,안되면 될때까지

1260-DFS와 BFS 본문

백준/백준-파이썬

1260-DFS와 BFS

soo97 2022. 3. 3. 23:09
728x90
반응형

<문제>

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

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

www.acmicpc.net

<풀이>

https://hae-sooo97.tistory.com/25

 

탐색(DFS/BFS)

1)DFS :Depth-First Search, 깊이우선탐색,그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 탐색 시작노드를 스택에 삽입하고 방문처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접노드가

hae-sooo97.tistory.com

※주의점 :  dfs함수를 호출한후 visited 배열을 원래대로 다시 돌려놔야한다!!

              위 링크에 설명대로  dfs(graph,n,visited)와 같이 인자를 3개를 집어넣으면 런타임 에러가 발생함!

              입력시 int(input()) 보다 import sys를 이용해 sys.stdin.readline().split()를 사용하면 시간단축 가능

<코드>

-파이썬-

from collections import deque
import sys

def dfs(n):
    visited[n] = True
    print(n,end = ' ')
    for i in graph[n]:
        if not  visited[i]:
            dfs(i)


def bfs(start):
    queue = deque([start])
    visited[start] = True
    while queue:
        v = queue.popleft();
        print(v,end = ' ')
        for i in graph[v]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True

n,m,start = map(int,sys.stdin.readline().split())
graph = [[] for _ in range(n+1)]
for i in range(m):
    a,b = map(int,sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)
for i in range(1,n+1):
    graph[i].sort()
visited = [False]*(n+1)
dfs(start)
visited = [False]*(n+1)
print()
bfs(start)
728x90
반응형

'백준 > 백준-파이썬' 카테고리의 다른 글

[백준]18352- 특정거리의 도시 찾기  (6) 2022.03.05
2178-미로탈출  (0) 2022.03.05
1715-카드 정렬하기  (0) 2022.03.01
14888-연산자 끼워넣기  (0) 2022.02.26
18428-감시피하기  (0) 2022.02.26
Comments