1260. DFS와 BFS

Taesoo Kim·2023년 1월 17일
0

CrackingAlgorithm

목록 보기
12/36

Leethub로 풀이를 깃헙에 바로 올리려 했는데, 잘 안되서 백준으로 갈아탔다ㅋㅋ
다행히 백준허브는 잘 작동 되는듯.

계속 DFS&BFS 위주의 문제를 보고있다.
예전에도 풀었지만 새로운 방법으로 접근해보려고 한다.

from collections import deque

node, edge, start = map(int,input().split())
graph = []

for i in range(edge):
  route = list(map(int, input().split()))
  
  graph.append(route)

graph.sort(key = lambda x:(x[0],x[1]))

result_dfs = []

def dfs(start):
  if start not in result_dfs:
    result_dfs.append(start)
    for route in graph:
      if route[0] == start:
        dfs(route[1])
      if route[1] == start:
        dfs(route[0])

result_bfs = []

def bfs(start):
  qq = deque()
  qq.append(start)    
  
  while qq:
    temp = qq.popleft()
    
    if temp not in result_bfs:
      result_bfs.append(temp)
      for route in graph:
        if route[0] == temp:
          qq.append(route[1])
        if route[1] == temp:
          qq.append(route[0])
        
dfs(start)
bfs(start)

print(result_dfs)
print(result_bfs)

사실 BFS&DFS 라는 큰 틀은 벗어나지 않지만, 접근하는 방식을 틀어봤다.
대부분 다 visited라는 리스트를 통해 방문한 노드인지를 기록하는데, 그냥 바로 반환값을 만들면 되지 않을까 싶어서 시도해 보았는데,
당연히 잘 안된다ㅎㅎ
어디서 틀려먹은건지 좀 시간을 두고 봐봐야겠다.

아래의 코드는 예전에 내 풀이다. 특별한거 없이 여느 블로그에나 굴러다니는 정석적인 풀이다.

from collections import deque

def bfs(graph, v, visited):
  queue = deque([v])

  visited[v] = True

  while queue:
    v = queue.popleft()
    print(v,end=' ')

    for i in graph[v]:
      if not visited[i]:
        queue.append(i)
        visited[i] = True

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

nodes, vertices, start = map(int, input().split())

graph = [[] for i in range(nodes+1)]

for i in range(vertices):
  a, b = map(int, input().split())
  graph[a].append(b)
  graph[b].append(a)

for i in graph:
  i.sort()
visited = [False]*(nodes+1)

dfs(graph, start, visited)
print('\n', end='')
visited = [False]*(nodes+1)

bfs(graph, start, visited)
profile
SailingToTheMoooon

0개의 댓글