《字节跳动》笔试第一题

题目描述:在[m,n]的矩阵中,用1表示有人,0表示没人。假如两个人的位置相邻(包括斜着相邻,水平相邻,垂直相邻),则他们是属于一个团体。

输入:

第一行输入两个数m,n,用,隔开

接下来输入m行,每一行输入n个数,用逗号隔开

输出:

矩阵中有多少个团体,以及最大团体的人数。

例如:

输出6,11(程序没有管输出的格式,自己可以修改)

import sys
global r
r = []
global r1
r1 = 0

def judge(a, x, y):
    if a[x][y] == 1:
        global r1
        r1 = r1 + 1
        a[x][y] = -1
        return True
    else:
        return False


def move(a, x, y, m, n):
    if  x < 0 or y < 0 or x >= m or y >= n or a[x][y] != 1:
        return
    else:
        if judge(a, x, y):
            move(a, x, y + 1, m, n)
            move(a, x, y - 1, m, n)
            move(a, x + 1, y, m, n)
            move(a, x - 1, y, m, n)
            move(a, x - 1, y - 1, m, n)
            move(a, x - 1, y + 1, m, n)
            move(a, x + 1, y + 1, m, n)
            move(a, x + 1, y - 1, m, n)


if __name__ == '__main__':
    d = sys.stdin.readline().strip().split(',')
    m = int(d[0])
    n = int(d[1])
    a = []
    for i in range(0, m):
        b = sys.stdin.readline().strip().split(',')
        b = map(int, b)
        a.append(b)

    c = 0
    for i in range(0, m):
        for j in range(0, n):
            if a[i][j] == 1:
                r1 = 0
                c = c + 1
                move(a, i, j, m, n)
                r.append(r1)
                r1 = 0
    print c
    print r

猜你喜欢

转载自blog.csdn.net/w113691/article/details/81607517