- from collections import deque
- n,m=map(int,input().split())
- direction=[[0,1],[0,-1],[1,0],[-1,0]]
- g=[]
- for i in range(n):
- g.append(list(map(int,input().split())))
- visit=[[False]*(m) for _ in range(n)]
- res=0
- def bfs(g,visit,x,y):
- deq=deque([])
- deq.append([x,y])
- visit[x][y]=True
- while deq:
- cx,cy=deq.popleft()
- for i,j in direction:
- next_x=cx+i
- next_y=cy+j
- if next_x<0 or next_x>=n or next_y<0 or next_y>=m:
- continue
- if not visit[next_x][next_y] and g[next_x][next_y]==1:
- visit[next_x][next_y]=True
- deq.append([next_x,next_y])
- for i in range(n):
- for j in range(m):
- if not visit[i][j] and g[i][j]==1:
- res+=1
- bfs(g,visit,i,j)
- print(res)
bfs↑
dfs↓
n,m=map(int,input().split())g=[]foriinrange(n):g.append(list(map(int,input().split())))direction=[[0,1],[0,-1],[1,0],[-1,0]]flag=[[False]*(m)foriinrange(n)]defdfs(g,flag,x,y):fori,jindirection:next_x=x+inext_y=y+jifx+i>n-1orx+i<0ory+j>m-1ory+j<0:continueifnotflag[next_x][next_y]andg[next_x][next_y]==1:flag[next_x][next_y]=Truedfs(g,flag,next_x,next_y)res=0foriinrange(n):forjinrange(m):ifg[i][j]==1andnotflag[i][j]:res+=1flag[i][j]=Truedfs(g,flag,i,j)print(res)