题目描述:
随着公司快速发展,基层团队越来越多。近期公司希望对部门重新做个划分,尽可能把紧密合作的团队放到同一个部门。
给定一个M*M的二维数组,每个值1的元素代表一个团队。如果2个团队在上下或左右的方向上相邻,说明2个团队有紧密合作关系。
需要把合作紧密的团队放在一起,形成一个部门;没有合作关系的团队,放到不同的部门。
判断给定输入中,有多少个部门?
例如,给定一个二维数组:
1 0 0 1 1
1 0 0 1 1
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
其中有9个团队,一共需要组成3个部门,分别是:
1
1
以及
1 1
1 1
以及
1
1
1
输入描述:
第一行一个整数,代表M
后面M行,每行M个整数(取值0或1)
输出描述:
一个整数,表示部门数量。
示例:
输入
4
1 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1
输出:
2
备注:
1<M<1000
代码:
def group(array,i,j,k):
if array[i][j]==1:
array[i][j]=0
k+=1
if i-1>=0:
array,k=group(array,i-1,j,k)
if i+1<len(array):
array,k=group(array,i+1,j,k)
if j-1>=0:
array,k=group(array,i,j-1,k)
if j+1<len(array[0]):
array,k=group(array,i,j+1,k)
return array,k
array=[[1,0,0,1],[0,0,0,0],[0,0,0,0],[1,1,1,1]]
m=4
n=len(array[0])
t=0
for i in range(m):
for j in range(n):
k=0
array_new,k=group(array,i,j,k)
if k>0:
t+=1
print(t)