728x90
단계별로 풀어보기 DFS와 BFS의 1단계 문제
이번에는 파이썬으로 풀어봤다.
class Graph:
def __init__(self, n):
self.data = {}
for i in range(1, n + 1):
self.data[i] = set()
def add_edge(self, n, m):
self.data[n].add(m)
self.data[m].add(n)
def dfs(self, start):
visited = [False] * (len(self.data) + 1)
stack = []
stack.append(start)
while stack:
cur = stack.pop()
if not visited[cur]:
print(cur, end=" ")
visited[cur] = True
temp = []
for i in self.data[cur]:
if not visited[i]:
temp.append(i)
temp.sort()
temp.reverse()
stack.extend(temp)
def bfs(self, start):
import collections
visited = [False] * (len(self.data) + 1)
queue = collections.deque()
queue.append(start)
while queue:
cur = queue.popleft()
if not visited[cur]:
print(cur, end=' ')
visited[cur] = True
temp = []
for i in self.data[cur]:
if not visited[i]:
temp.append(i)
temp.sort()
queue.extend(temp)
from sys import stdin
node_edge_start = list(map(int, stdin.readline().split()))
graph = Graph(node_edge_start[0])
li = []
for i in range(0, node_edge_start[1]):
rawInput = list(map(int, stdin.readline().split()))
graph.add_edge(rawInput[0], rawInput[1])
graph.dfs(node_edge_start[2])
print()
graph.bfs(node_edge_start[2])
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 2667번 단지번호붙이기 (0) | 2020.01.08 |
---|---|
[백준] 2606번 바이러스 (0) | 2020.01.08 |
[백준] 1912 연속합 (미해결) (0) | 2020.01.07 |
[백준] 9963번 N-Queen (0) | 2020.01.06 |
[백준] 15652번 N과 M (4) (0) | 2020.01.06 |