Programming/Python

[Python3] 무인도 여행 - BFS / DFS

아나엘 2023. 7. 27. 16:35

1. BFS

- 코드

#BFS -> Queue

from collections import deque 
dx=[1,0,-1,0]
dy=[0,1,0,-1] #r,u,l,d -> have to be declared outside of the fuction..
    
def bfs(x,y, r,c, field, visited):

    q = deque([(x,y)]) #deque : bidirectional queue
    visited[x][y] = 1 # argument(x, y) passing
    cost = int(field[x][y]) #get values from maps[x][y].. initialize
    while q:
        cx, cy = q.popleft()

        for i in range(4): 
            nr = cx + dx[i]
            nc = cy + dy[i]

            
            if 0<=nr<r and 0<=nc<c and field[nr][nc] !='X': #The order of conditions in a conditional statement is also important.
                #check visit, add cost, append (nr, nc)
                if not visited[nr][nc]:
                    visited[nr][nc] =1
                    cost += int(field[nr][nc]) 
                    q.append((nr,nc))
    
    return visited, cost

def solution(maps):
    answer = []
    r, c = len(maps), len(maps[0]) #limit
    visited=[[0]*c for _ in range(r)]

    for i in range(r):
        for j in range(c):
            if maps[i][j] !='X' and not visited[i][j] :#visited[i][j]==0:

                visited, an = bfs(i,j, r,c, maps, visited)
                answer.append(an)


    return sorted(answer) if answer else [-1]

- 주의사항

 범위체크, deque, solution 함수 바깥쪽 bfs함수 위치

 

 

2. DFS

-코드

-주의사항

  stack, solution 함수 안에 DFS함수 위치

  python 재귀 깊이 1000으로 제한

  ->맨 위에 아래코드 넣어줘야함

import sys
limit_number = 10000
sys.setrecursionlimit(limit_number)

 

반응형