알고리즘

[백준 알고리즘] 1260번 DFS와 BFS. 파이썬(python)

삶은겨란 2022. 4. 28. 17:01
import queue


n,m,v=map(int,input().split())

# 인접행렬(adjacency matrix)
# 그래프에서 어느 노드들끼리 연결되었는지 나타내는 이차원 행렬
graph=[[0]*(n+1) for _ in range(n+1)] 

for _ in range(m):
    x,y=list(map(int,input().split()))
    # 양방향 그래프
    graph[x][y]=graph[y][x]=1

# 방문 리스트(True/False or 0/1)
dfs_visited, bfs_visited= [False]*(n+1),[False]*(n+1)

# DFS-스택
def dfs(v):
    dfs_visited[v]=True # 정점 v에 대해 방문처리
    print(v, end=' ') # 띄어쓰기 단위로 출력

    for i in range(1,n+1):
        if graph[v][i]==1 and dfs_visited[i]==False: # 해당 정점에 연결된 정점이면서 아직 방문을 안했으면
            dfs(i)

# BFS-큐
def bfs(v):
    queue=[v] # 현재 방문중인 정점를 큐에 넣는다
    bfs_visited[v]=True # 현재 정점를 방문 처리한다

    while queue:
        v=queue.pop(0) # 방문한 정점 제거
        print(v,end=' ') # 정점 제거하면서 출력

        for i in range(1,n+1):
            # 해당 정점에 연결된 정점이면서 아직 방문을 안했으면
            if graph[v][i]==1 and bfs_visited[i]==False:
                queue.append(i) # 정점을 큐에 넣는다
                bfs_visited[i]=True # 방문처리 

dfs(v)
print()
bfs(v)