1260번_DFS와 BFS

Ji·2021년 5월 18일
0
## 내 풀이
import sys
from collections import deque
n,m,v=map(int,sys.stdin.readline().split())
# n은 정점개수. m은 간선개수. v는 탐색 시작 노드.

graph=[[0]*(n+1) for i in range(n+1)]
visited=[0]*(n+1)
visited_bfs=[0]*(n+1)

# 0 노드는 제외하고 생각 (헷갈리지 않게 하기 위해)
queue=deque()

for i in range(m):
    a,b=map(int,input().split())
    graph[a][b]=graph[b][a]=1 # 서로 연결된 노드는 1로 표시한다.

def dfs(v):
    visited[v]=True
    print(v,end=' ')
    for i in range(1,n+1):
        if visited[i]==0 and graph[v][i]==1:
            dfs(i)




def bfs(v): # bfs는 재귀 사용 X
    queue.append(v) # 현재 노드를 저장.
    visited_bfs[v]=True # 방문한 노드는 1로 표시
    
    
    
    while queue:
        x=queue.popleft()
        print(x,end=' ')

        for i in range(1,n+1):
            if visited_bfs[i]==0 and graph[x][i]==1:
                queue.append(i)
                visited_bfs[i]=1 # 방문 노드 표시
    
dfs(v)
print()
bfs(v)


  • bfs에서도 재귀문 쓰는 줄 알고 미친듯이 헤맸다.
  • dfs에서만 재귀문 사용해서 탐색한 노드에서 더 깊게 탐색 수행.
  • 연결된 노드들을 0,1로 나타내어 표현하는 방법 (중요)

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

profile
공부방

0개의 댓글