๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] 17086๋ฒˆ_์•„๊ธฐ ์ƒ์–ด 2

Dbswnstjd 2022. 12. 2. 01:19

๋ฌธ์ œ

https://www.acmicpc.net/problem/17086

 

17086๋ฒˆ: ์•„๊ธฐ ์ƒ์–ด 2

์ฒซ์งธ ์ค„์— ๊ณต๊ฐ„์˜ ํฌ๊ธฐ N๊ณผ M(2 ≤ N, M ≤ 50)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ณต๊ฐ„์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, 0์€ ๋นˆ ์นธ, 1์€ ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์žˆ๋Š” ์นธ์ด๋‹ค. ๋นˆ ์นธ๊ณผ ์ƒ์–ด์˜ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ ํ•œ ๊ฐœ ์ด์ƒ์ธ ์ž…๋ ฅ๋งŒ

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 17086๋ฒˆ ๋ฌธ์ œ - ์•„๊ธฐ ์ƒ์–ด 2
from collections import deque
dx = [0,0,-1,1,1,1,-1,-1]
dy = [1,-1,0,0,1,-1,1,-1]
n, m = map(int, input().split())
graph = [list(map(int, input().split(' '))) for _ in range(n)]
ans = 0 

def bfs(x, y):
    queue = deque()
    queue.append((x, y))
    visited = [[0] * m for _ in range(n)]
    visited[x][y] = 1
    while queue:
        x, y = queue.popleft()
        for i in range(8):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and visited[nx][ny] == 0:
                # print('์ƒ์–ด', graph[nx][ny])
                # print('๊ฑฐ๋ฆฌ', visited[x][y])
                visited[nx][ny] = visited[x][y] + 1
                queue.append((nx, ny))
                if graph[nx][ny] == 1:
                    print(visited)
                    return visited[nx][ny]-1

dist = []
for i in range(n):
    for j in range(m):
        if graph[i][j] != 1:
            dist.append(bfs(i, j))

print(max(dist))