728x90
https://www.acmicpc.net/problem/1012
1012번: 유기농 배추
차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에
www.acmicpc.net
이전 문제와 똑같은 유기농 배추 문제이다.
역시 이차원 그래프, visited배열, 밭의 지도를 그리고 이어져있는 밭의 개수를 새면 된다.
t = int(input())
dx = [0,1,0,-1]
dy = [1,0,-1,0]
for _ in range(t):
m,n,k = map(int,input().split())
farm = [ [ 0 for _ in range(m) ] for __ in range(n) ]
graph = [[[] for _ in range(m)] for __ in range(n)]
visited = [ [False] * m for _ in range(n) ]
cnt = 0
for __ in range(k):
x,y = map(int,input().split())
farm[y][x] = 1
for i in range(n):
for j in range(m):
for k in range(4):
try:
if farm[i][j] and farm[i+dx[k]][j+dy[k]]:
if i + dx[k] >= 0 and j + dy[k] >= 0:
graph[i][j].append([i+dx[k],j+dy[k]])
except:
continue
def dfs(x,y):
visited[x][y] = True
for a,b in graph[x][y]:
if not visited[a][b]:
dfs(a,b)
for i in range(n):
for j in range(m):
if not visited[i][j] and farm[i][j]:
dfs(i,j)
cnt+=1
print(cnt)
dfs 와 bfs 모두 풀어보았다.
from collections import deque
t = int(input())
dx = [0,1,0,-1]
dy = [1,0,-1,0]
for _ in range(t):
m,n,k = map(int,input().split())
farm = [ [ 0 for _ in range(m) ] for __ in range(n) ]
graph = [[[] for _ in range(m)] for __ in range(n)]
visited = [ [False] * m for _ in range(n) ]
cnt = 0
for __ in range(k):
x,y = map(int,input().split())
farm[y][x] = 1
for i in range(n):
for j in range(m):
for k in range(4):
try:
if farm[i][j] and farm[i+dx[k]][j+dy[k]]:
if i + dx[k] >= 0 and j + dy[k] >= 0:
graph[i][j].append([i+dx[k],j+dy[k]])
except:
continue
def bfs(x,y):
q = deque([[x,y]])
visited[x][y] = True
while q:
tmp = q.popleft()
for a,b in graph[tmp[0]][tmp[1]]:
if not visited[a][b]:
q.append([a,b])
visited[a][b]=True
for i in range(n):
for j in range(m):
if not visited[i][j] and farm[i][j]:
bfs(i,j)
cnt+=1
print(cnt)
728x90
'Python > 백준' 카테고리의 다른 글
2206_벽부수고 이동하기 (0) | 2022.04.02 |
---|---|
1697_숨바꼭질 (0) | 2022.04.01 |
2667_단지번호 붙이기 (0) | 2022.03.27 |
2606_바이러스 (0) | 2022.03.26 |
1260_bfs와dfs (0) | 2022.03.25 |