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

๐ŸŸฉ [๋ฐฑ์ค€] [Python] 1743๋ฒˆ_์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

Dbswnstjd 2022. 12. 7. 03:17

๋ฌธ์ œ

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

 

1743๋ฒˆ: ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ํ†ต๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ€๋กœ ๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ  ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ์˜ ๊ฐœ์ˆ˜ K(1 ≤ K ≤ N×M)์ด ์ฃผ์–ด์ง„๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ K๊ฐœ์˜ ์ค„์— ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ง„ ์ขŒํ‘œ (r, c)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 1743๋ฒˆ ๋ฌธ์ œ - ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ
from collections import deque
dx, dy = [0,0,-1,1], [1,-1,0,0]
n, m, k = map(int, input().split())
graph = [[0]*m for _ in range(n)]
for _ in range(k):
    a, b = map(int, input().split())
    graph[a-1][b-1] = 1

def bfs(x, y):
    q = deque()
    q.append((x,y))
    visited[x][y] = 1
    global cnt
    cnt = 1
    while q:
        x,y = q.popleft()

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny] and graph[nx][ny] == 1:
                visited[nx][ny] = 1
                cnt += 1
                q.append((nx, ny))
    return cnt
res = []
visited = [[0]*m for _ in range(n)]
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            cnt = 0
            res.append(bfs(i,j))
print(max(res))

BFS๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๋‹ค๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.