- 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
=
[]
for
i
in
range
(n):
g.append(
list
(
map
(
int
,
input
().split())))
direction
=
[[
0
,
1
],[
0
,
-
1
],[
1
,
0
],[
-
1
,
0
]]
flag
=
[[
False
]
*
(m)
for
i
in
range
(n)]
def
dfs(g,flag,x,y):
for
i,j
in
direction:
next_x
=
x
+
i
next_y
=
y
+
j
if
x
+
i>n
-
1
or
x
+
i<
0
or
y
+
j>m
-
1
or
y
+
j<
0
:
continue
if
not
flag[next_x][next_y]
and
g[next_x][next_y]
=
=
1
:
flag[next_x][next_y]
=
True
dfs(g,flag,next_x,next_y)
res
=
0
for
i
in
range
(n):
for
j
in
range
(m):
if
g[i][j]
=
=
1
and
not
flag[i][j]:
res
+
=
1
flag[i][j]
=
True
dfs(g,flag,i,j)
print
(res)