Private 난이도 : ♥♥♥♡♡
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
from collections import deque,defaultdict
n,m,v=map(int,input().split(' '))
# print(n,m,v)
graph=defaultdict(list)
nodes=list()
for mm in range(m):
first, second=map(int,input().split(' '))
graph[first].append(second)
graph[second].append(first)
nodes.append(first)
for node in nodes:
graph[node].sort()
# print('graph', graph) #그래프 완성
def dfs(v, graph, visited,dfs_answer):
visited[v]=True # 방문 처리
dfs_answer=dfs_answer+str(v)+' '
print(v,end=' ')
for g in graph[v]:
# print('g',g)
if visited[g]==False:
visited[g]==True
dfs(g,graph,visited,dfs_answer)
def bfs(v, graph, visited,bfs_answer):
q=deque([v])
while q:
now=q.popleft()
if visited[now]==False:
visited[now]=True
print(now, end=' ')
bfs_answer=bfs_answer+str(now)+' '
for s in graph[now]:
q.append(s)
visited=[False]*(n+1) # 0 번째 사용 안함
dfs_answer=''
dfs(v,graph,visited,dfs_answer)
print(dfs_answer)
bfs_answer=''
visited=[False]*(n+1) # 0 번째 사용 안함
bfs(v,graph,visited,bfs_answer)
print(dfs_answer)
배운 점
- graph를 만들며 필요했던 defaultdict
value의 형을 지정할 수 있었다. - bfs 처음 해봤다
'개발 > Algorithm' 카테고리의 다른 글
[Algorithm] 백준 BOJ 2644 촌수계산 python 파이썬 그래프 DFS 실버 2 (0) | 2022.05.03 |
---|---|
[Algorithm] 백준 BOJ 7576 토마토 python 파이썬 BFS 골드 5 / 메모리 초과 (0) | 2022.04.29 |
[Algorithm] 백준 BOJ 2468 안전 영역 python 파이썬 그래프 실버 1 (0) | 2022.03.23 |
[Algorithm] 백준 BOJ 1012 유기농 배추 python 파이썬 그래프 실버 2 (0) | 2022.03.23 |
[Algorithm] 백준 BOJ 2606 바이러스 python 파이썬 그래프 실버 3 (0) | 2022.03.23 |