728x90
BOJ 1260 DFS와 BFS |
https://man-25-1.tistory.com/214
dfs,bfs 개념설명은 위 글을 참조하면 됩니다.
문제
DFS와 BFS 공부한 내용을 적용해볼 겸 가장 기초 문제를 풀어보았다.
https://www.acmicpc.net/problem/1260
문제는 그냥 DFS와 BFS를 구현하는 간단한 문제이다. 따로 설명이 필요한 부분은 없을거같다.
예제 입출력 부분을 확인하면, 각 정점의 인접정점 정보를 한줄씩 입력받는다. 이 부분을 그래프 정보로 어떻게 표현할지만 고민하면 될 것 같다.
풀이코드
기초적인 내용이라 따로 설명할 부분은 없을거같다. 다만 정점의 인접정보를 아래 코드처럼 1차원 리스트를 선언해서 해줄수도 있지만 좀 보기좋게 2차원리스트로 하는게 더 깔끔해보이긴한다.
from collections import deque def dfs(graph,v,visited): visited[v]= True print(v, end=' ') for i in graph[v]: if not visited[i]: dfs(graph,i,visited) def bfs(graph,start,visited): queue = deque([start]) visited[start] = True while queue: v = queue.popleft() print(v,end =' ') for i in graph[v]: if not visited[i]: queue.append(i) visited[i] = True N,M,V = map(int,input().split()) graph = [] for i in range(N+1): graph.append([]) for i in range(M): v,w= map(int,input().split()) graph[v].append(w) graph[w].append(v) graph[v].sort() graph[w].sort() visited = [False] * (N+1) dfs(graph,V,visited) visited = [False] * (N+1) print() bfs(graph,V,visited) |
2차원리스트로 수정한 코드
from collections import deque def dfs(matrix,v,visited): visited[v]= True print(v, end=' ') for i in range(1,N+1): if not visited[i] and matrix[v][i] == 1: dfs(matrix,i,visited) def bfs(matrix,start,visited): queue = deque([start]) visited[start] = True while queue: v = queue.popleft() print(v,end =' ') for i in range(1,N+1): if not visited[i] and matrix[v][i] == 1: queue.append(i) visited[i] = True N,M,V = map(int,input().split()) #0행과 0열은 쓰지않는다 matrix = [[0 for _ in range(N+1)] for _ in range(N+1)] for i in range(M): v,w= map(int,input().split()) matrix[v][w] = 1 matrix[w][v] = 1 visited = [False] * (N+1) dfs(matrix,V,visited) visited = [False] * (N+1) print() bfs(matrix,V,visited) |
728x90
'개인 공부 > 알고리즘 트레이닝' 카테고리의 다른 글
[python] BOJ 2667 단지번호붙이기 (0) | 2022.04.12 |
---|---|
[python] BOJ 2606 바이러스 (0) | 2022.04.12 |
[python] BOJ 1541 잃어버린 괄호 (0) | 2021.08.19 |
[python] BOJ 13305 주유소 (0) | 2021.08.18 |
[python] BOJ 11399 ATM (0) | 2021.08.17 |
댓글