๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ

[python] ๋ฐฑ์ค€18405_๊ฒฝ์Ÿ์  ์ „์—ผ (DFS&BFS)

by ๋ญ…์ฆค 2022. 2. 6.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

ํ’€์ด

BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๊ณ , ๊ฐ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋‚ฎ์€ ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ์ฆ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ์— ํ์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ๋‚ฎ์€ ๋ฐ”์ด๋Ÿฌ์Šค์˜ ๋ฒˆํ˜ธ๋ถ€ํ„ฐ ์‚ฝ์ž…ํ•ด์•ผ ํ•œ๋‹ค.

ํ์—์„œ ๋‚ฎ์€ ๋ฐ”์ด๋Ÿฌ์Šค ๋ฒˆํ˜ธ๋ถ€ํ„ฐ popํ•˜์—ฌ ์ƒํ•˜์ขŒ์šฐ๋กœ ๋ฐ”์ด๋Ÿฌ์Šค ๋ฒˆ์‹์‹œํ‚ค๊ณ , ๋ฒˆ์‹๋œ ์œ„์น˜๋ฅผ ๋‹ค์‹œ ํ์— ๋„ฃ๊ณ , ์›ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ฝ”๋“œ

from collections import deque

n, k = map(int,input().split())

graph = [] # ์ „์ฒด ๋ณด๋“œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ
data = [] # ๋ฐ”์ด๋Ÿฌ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ

for i in range(n):
    # ๋ณด๋“œ ์ •๋ณด๋ฅผ ํ•œ ์ค„ ๋‹จ์œ„๋กœ ์ž…๋ ฅ
    graph.append(list(map(int, input().split())))

    for j in range(n):
        # ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
        if graph[i][j] != 0:
            # (๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜, ์‹œ๊ฐ„, ์œ„์น˜ x,y) ์‚ฝ์ž…
            data.append((graph[i][j],0,i,j))

# ์ •๋ ฌ ์ดํ›„์— ํ๋กœ ์˜ฎ๊ธฐ๊ธฐ - ๋‚ฎ์€ ๋ฒˆํ˜ธ์˜ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋จผ์ € ์ฆ์‹ํ•˜๋‹ˆ๊นŒ

data.sort()
q = deque(data)

target_s, target_x, target_y = map(int, input().split()) # ์‹œ๊ฐ„, ์œ„์น˜ x,y

# ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋Š” 4๊ฐ€์ง€ ์œ„์น˜
dx = [-1,0,1,0]
dy = [0,1,0,-1]

# BFS ์ง„ํ–‰
while q:
    virus,s,x,y = q.popleft()
    # ์ •ํ™•ํžˆ s์ดˆ๊ฐ€ ์ง€๋‚˜๊ฑฐ๋‚˜, ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    if s==target_s :
        break
    # ํ˜„์žฌ ๋…ธ๋“œ์—์„œ 4๊ฐ€์ง€ ์œ„์น˜๋ฅผ ๊ฐ๊ฐ ํ™•์ธ
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx>=0 and nx<n and ny>=0 and ny<n:
            # ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์œ„์น˜๋ผ๋ฉด, ๊ทธ ์œ„์น˜์— ๋ฐ”์ด๋Ÿฌ์Šค ๋„ฃ๊ธฐ
            if graph[nx][ny] ==0:
                graph[nx][ny] = virus
                q.append((virus,s+1,nx,ny))

print(graph[target_x-1][target_y-1])
๋ฐ˜์‘ํ˜•