Problem Solving/BOJ(백준)
[BOJ]백준 22352번: 항체 인식(Python)/BFS
이진2
2021. 8. 4. 20:50
https://www.acmicpc.net/problem/22352
22352번: 항체 인식
첫 번째 줄에는 SP 촬영 결과의 크기를 의미하는 두 정수 $N$과 $M$이 주어진다. ($1 \le N, M \le 30$) 이는 촬영 결과가 세로로 $N$칸, 가로로 $M$칸 크기의 격자라는 것을 의미한다. 다음 $N$개의 줄에는
www.acmicpc.net
특정 좌표에서 BFS또는 DFS를 시행하여 같은 숫자인 칸을 전부 업데이트 시킨 뒤 주어진 배열과 같은지 검사하면 되는 간단한 BFS 문제
import sys
from collections import deque
def bfs(r, c, num):
global origin, after, n, m
dx=[1,0,-1,0]
dy=[0,1,0,-1]
visit=[[False for _ in range(m)] for _ in range(n)]
o=origin[r][c]
q=deque()
q.append([r, c])
visit[r][c]=True
while q:
cur=q.pop()
origin[cur[0]][cur[1]]=num
for i in range(4):
nr=cur[0]+dx[i]
nc=cur[1]+dy[i]
if not (nr>=0 and nr<n and nc>=0 and nc<m): continue
if not visit[nr][nc] and origin[nr][nc]==o:
q.append([nr, nc])
visit[nr][nc]=True
def solution(n, m, origin, after):
for i in range(n):
for j in range(m):
if origin[i][j]==after[i][j]: continue
bfs(i,j,after[i][j])
for r in range(n):
for c in range(m):
if origin[r][c]!=after[r][c]: return "NO"
return "YES"
return "YES"
input=sys.stdin.readline
n,m=map(int,input().split())
origin = []
for _ in range(n):
origin.append(list(map(int,input().split(" "))))
after = []
for _ in range(n):
after.append(list(map(int,input().split(" "))))
print(solution(n, m, origin, after))