728x90
DFS (좌표 형태 순회용)
def dfs(x, y):
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if isRectangle(nx, ny) and copyed_maps[nx][ny] == 1 and chk[nx][ny] == -1:
chk[nx][ny] = 1
dfs(nx, ny)
def isRectangle(x, y):
if 0 <= x < n and 0 <= y < n:
return True
return False
# 예시 그래프 (지도)와 chk 배열 초기화
n = 5
copyed_maps = [
[1, 1, 0, 0, 0],
[0, 1, 0, 1, 1],
[0, 1, 0, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 1]
]
chk = [[-1 for _ in range(n)] for _ in range(n)]
# 시작점 방문 표시 및 DFS 호출
chk[0][0] = 1
dfs(0, 0)
# chk 배열 출력
for row in chk:
print(row)
DFS ( 노드와 노드 순회용)
n = int(input())
connects = int(input())
connectList = [[0] * (n + 1) for _ in range(n + 1)]
visited = [0 for _ in range(n + 1)]
answer = 0
for _ in range(connects):
a, b = map(int, input().split())
connectList[a][b] = 1
connectList[b][a] = 1
def dfs(num):
global answer
visited[num] = 1
answer += 1
for i in range(n + 1):
if visited[i] == 0 and connectList[num][i] == 1:
dfs(i)
dfs(1)
print(answer - 1)
BFS
def bfs(x, y):
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
q = deque([])
q.append([x, y])
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if isRetangle(nx, ny) and copyed_maps[nx][ny] == 1 and chk[nx][ny] == -1:
chk[nx][ny] = 1
q.append([nx, ny])
def isRetangle(x, y):
if 0 <= x < n and 0 <= y < n:
return True
return False
맵, 체크 함수 초기화 코드
copyed_maps = [[0 for _ in range(n)] for _ in range(n)]
chk = [[-1 for _ in range(n)] for _ in range(n)]
DFS, BFS 그래프 탐색 풀 때, 이렇게 탬플릿 코드를 기억 해두면 풀기 좋으므로, 기억용 포스팅!
728x90
'프로그래머스 고득점kit > DFS, BFS 탐색' 카테고리의 다른 글
[고득점 kit]DFS/BFS_#4. 여행 경로 (0) | 2022.05.02 |
---|---|
[고득점 kit]_DFS/BFS_#3. 단어 변환 (0) | 2022.05.01 |
[고득점 kit]_DFS/BFS_#2. 네트워크 (0) | 2022.04.26 |
[고득점 kit]_DFS/BFS_#1. 타겟 넘버 (0) | 2022.04.25 |