Не могу найти ошибку в коде. Задача с сайта ACMP (951 вирус)

На вход дают размены матрицы N, M (количество строк и столбцов соответственно). На 2 строчке число K - клеток с вирусами и сами клетки вирусов. Через каждую единицу времению происходит заражение ближайших клеток. Нужно вывести время заражения всей области.

Пример:
Ввод 4 5 
2 2 1 4 5 
Вывод 4

Мой код на 10 тесте выдает неправильный ответ

def f(e):
    gg=[]
    for i in range(n):
        for j in range(m):
            if e[i][j]==1:
                if (j+1)<m:
                    gg.append(i)
                    gg.append(j+1)
                if (j-1)>=0:
                    gg.append(i)
                    gg.append(j-1)
                if(i-1)>=0:
                    gg.append(i-1)
                    gg.append(j)
                if (i+1)<n:
                    gg.append(i+1)
                    gg.append(j)
    for i in range(0,len(gg),2):
        e[gg[i]][gg[i+1]]=1
        
    return e


gg=[]
n,m=map(int,input().split())
mas=[]
ss=0
fff=0
t=0
d=list(map(int,input().split()))
r=1
for i in range(n):
    ff=[]
    for j in range(m):
        if r<len(d):
            if (i+1)==d[r] and (j+1)==d[r+1]:
                ff.append(1)
                r+=2
            else:
                ff.append(0)
        else:
            ff.append(0)
    mas.append(ff)
    #print(mas)
for i in range(n):
    ss+=sum(mas[i])
if ss==n*m:
    print(0)
else:
    for i in range(80):
        mas=f(mas)
        ss=0
        t=t+1
        if fff:
            break
        ###print(t)
        for i in range(n):
            ss+=sum(mas[i])
            ###print(mas[i])
            if ss==m*n:
                print(t)
                fff=1
                break

Ответы (1 шт):

Автор решения: GrAnd

Как минимум, у вас ошибка в алгоритме инициализации. Вы ожидаете на входе отсортированные координаты. Например, попробуйте переставить пары координат (2 1 и 4 5) из вашего примера входных данных, и увидите, что начальное состояние вашей матрицы будет неправильное.
Вот такой ввод:

4 5 
2 4 5 2 1

Ну и вообще, программу можно составить более компактно.

n,m = map(int, input().split())
matrix = [[False]*n for _ in range(m)]

x, *coords = map(int, input().split())
for i in range(x):
    matrix[coords[i*2+1]-1][coords[i*2]-1] = True

count = 0
while not all(sum(matrix, [])):
    new_matrix = [matrix[i].copy() for i in range(m)]
    for col in range(n):
        for row in range(m):
            if matrix[row][col]:
                for dc, dr in ((-1,0), (0,-1), (1,0), (0,1)):
                    c, r = col + dc, row + dr
                    if 0 <= c < n and 0 <= r < m:
                        new_matrix[r][c] = True
    count += 1
    matrix = new_matrix

print(count)
→ Ссылка