본문 바로가기

스터디 1일 1커밋

240310 [BOJ/백준] 1260. DFS와 BFS

 

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net


나의 코드

def dfs(x):
    visited1[x] = 1
    print(x, end=' ')
    for w in adjl[x]:
        if visited1[w] == 1:
            continue
        dfs(w)

def bfs(x):
    visited2[x] = 1
    print(x, end=' ')
    for w in adjl[x]:
        q.append(w)

    while q:
        x = q.pop(0)
        if visited2[x] == 1:
            continue
        bfs(x)


N, M, V = map(int, input().split())
adjl = [[] for _ in range(N+1)]
visited1 = [0]*(N+1)
visited2 = [0]*(N+1)
for _ in range(M):
    i, j = map(int, input().split())
    adjl[i].append(j)
    adjl[j].append(i)


for k in adjl:  # 정점번호가 작은 것부터 방문하려고 정렬
    k.sort()

q = []
dfs(V)
print()
bfs(V)

 

결과


재귀함수로 DFS짜는 건 진우덕분에 이제 그냥 친닼ㅋㅋㅋㅋㅋㅋ BFS에서 한번 멈칫했는데 큐로 BFS하는 과정을 떠올리며 재귀함수로 짜봤다. 코드만 보면 쉬울 수 있는데 들여쓰기 부분에서 아주 조금 고난을 겪었다. 그리고 문제에서 주어진 것들을 확인하고 제출했더니 성공! PyPy로는 바로 성공해서 기뻤는데 같은 코드인데 Python은 런타임 에러가 났다. 왜인지는 모르겠으니 찾아보고 추가하도록 하겠다.