BOJ - 1260

주의·2023년 11월 30일
0

boj

목록 보기
20/214

백준 문제 링크
DFS와 BFS

❓접근법

  1. DFS는 앞만 보고 가는 방법, 다음에 갈 방향이 visited에 없으면 방향을 인자로 하는 함수를 다시 쓴다.(재귀함수로)
  2. BFS는 출발점을 기준으로 각 칸에 걸쳐 갈 수 있는 곳 먼저 가는 방법,
    visited에 없으면 queue에 넣어준다.

👌🏻코드

from collections import deque
def bfs(v):
    q = deque()
    q.append(v)
    visited[v] = 1
    visit = []
    
    
    while q:
        v = q.popleft()
        print(v, end = " ")
        for i in range(1, N+1):
            if visited[i] == 0 and graph[v][i] == 1:
                q.append(i)
                visited[i] = 1
                
                
                
                
def dfs(v):
    visited2[v] = 1
    print(v, end = " ")
    
    for i in range(1, N+1):
        if visited2[i] == 0 and graph[v][i] == 1:
            dfs(i)
            
N,M,V = map(int, input().split())
graph = [[0] * (N+1) for _ in range(N+1)]
visited = [0] * (N+1)
visited2 = [0] * (N+1)

for _ in range(M):
    x,y = map(int, input().split())
    graph[x][y] = graph[y][x] = 1
    
dfs(V)
print()
bfs(V)

❌틀린 코드

N,M,V = map(int, input().split())

graph = {i : [] for i in range(1, N+1)}

for _ in range(M):
    x = list(map(int, input().split()))
    graph[x[0]].append(x[1])
    graph[x[1]].append(x[0])
    graph[x[0]].sort()
    graph[x[1]].sort


# dfs 방법
def dfs(v, visited = []):
    visited.append(v)
    
    for w in graph[v]:
        if w not in visited:
            visited = dfs(w, visited)
            
    return visited

# bfs 방법
def bfs(v):
    visited = [v]
    queue = [v]
    
    while queue:
        x = queue.pop(0)
        for w in graph[x]:
            if w not in visited:
                visited.append(w)
                queue.append(w)
                
    return visited

print(*dfs(V))
print(*bfs(V))

처음 제출을 2번째 코드로 했는데 예제는 통과했지만 제출에는 실패했다 ㅠㅠ
BFS,DFS가 어려운만큼 잘하시는 분들 코드를 보고 공부를 많이 해야할 것 같다.

0개의 댓글