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은 런타임 에러가 났다. 왜인지는 모르겠으니 찾아보고 추가하도록 하겠다.
'스터디 1일 1커밋' 카테고리의 다른 글
| 240312 [BOJ/백준] 17298. 오큰수 (0) | 2024.03.12 |
|---|---|
| 240312 [BOJ/백준] 17478. 재귀함수가 뭔가요? (0) | 2024.03.12 |
| 240310 [BOJ/백준] 16953. A -> B (0) | 2024.03.10 |
| 240306 [BOJ/백준] 4779. 칸토어 집합 (2) | 2024.03.06 |
| 240306 [BOJ/백준] 10815. 숫자카드 (1) | 2024.03.06 |