PDD 9.1 笔试第二题为啥 40%,求个好心人帮看一下

from copy import deepcopy

# 输入
line = input().strip().split()
m, n = list(map(int, line))

matrix = [[0] * n for _ in range(m)]

for i in range(m):
    line = input().strip().split()
    line = list(map(int, line))
    for j in range(n):
        matrix[i][j] = line[j]

tmp_matrix = deepcopy(matrix)
#------        

# 记录队伍
dumps = []

# dfs搜队伍
def dfs(matrix, x, y, tmp):
    tmp.add((x, y))
    matrix[x][y] = 0
    for dx, dy in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
        nx, ny = x + dx, y + dy
        if 0 <= nx < m and 0 <= ny < n and matrix[nx][ny]:
            dfs(matrix, nx, ny, tmp)

for i in range(m):
    for j in range(n):
        if matrix[i][j]:
            tmp = set()
            dfs(matrix, i, j, tmp)
            dumps.append(tmp)
#------            

# 队伍的总数
num_dumps = len(dumps)
# 只有一个队伍,直接返回
if num_dumps == 1: print(len(dumps[0]))
# 没有队伍
elif num_dumps == 0: print(0)
# 有两只以上的队伍
else:
    # 最大队伍
    res = max(len(d) for d in dumps)
    # 所有士兵数量
    total = sum(len(d) for d in dumps)
    # 恢复之前的地图
    matrix = tmp_matrix
    # 寻找空位
    for i in range(m):
        for j in range(n):
            if matrix[i][j] == 0:
                # 将空位上下左右的士兵加入link
                link = set()
                for dx, dy in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
                    nx, ny = i + dx, j + dy
                    if 0 <= nx < m and 0 <= ny < n and matrix[nx][ny]:
                        link.add((nx, ny))
                # 和link有交集的全部加起来        
                tmp = 0
                for k in range(num_dumps):
                    if link & dumps[k]:
                        tmp += len(dumps[k])
                res = max(res, tmp)
    # 如果res不是全部士兵,就可以挪一个用
    print(res + 1 if res != total else res)


#笔试题目##拼多多#
全部评论
自己顶,求个好心人帮忙看一下,思路就是先找联通,然后遍历空缺 只能40%
点赞 回复 分享
发布于 2020-09-01 22:31
求求大佬路过帮萌新看下
点赞 回复 分享
发布于 2020-09-01 22:32
leetcode 827 几乎是原题,我把代码稍微改一下,leetcode就a了。。。 真是无语。。
点赞 回复 分享
发布于 2020-09-02 12:22

相关推荐

我冲冲冲冲冲:泪目了,好想选自己想选的答案啊
点赞 评论 收藏
分享
今天 01:46
已编辑
门头沟学院 Java
支付宝 java后端 n+2 双211cs硕
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务