Files
4laba/task2.py
2026-04-01 13:19:58 +03:00

88 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import random as r
from collections import deque
def generate_random_matrix(N, M):
"""
Генерирует матрицу N x M со случайными значениями 0, 1, 2
"""
matrix = [[0] * M for _ in range(N)]
for i in range(N):
for j in range(M):
matrix[i][j] = r.randint(0, 2)
return matrix
def count_good_apples(matrix):
count = 0
for row in matrix:
count += row.count(1)
return count
def solve_minutes(matrix):
if not matrix or not matrix[0]:
return -1
N = len(matrix)
M = len(matrix[0])
queue = deque()
good_count = 0
matrix_copy = [row[:] for row in matrix]
for i in range(N):
for j in range(M):
if matrix_copy[i][j] == 2:
queue.append((i, j, 0))
elif matrix_copy[i][j] == 1:
good_count += 1
if good_count == 0:
return 0
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
minutes = 0
while queue:
i, j, time = queue.popleft()
minutes = max(minutes, time)
for di, dj in directions:
ni, nj = i + di, j + dj
if 0 <= ni < N and 0 <= nj < M and matrix_copy[ni][nj] == 1:
matrix_copy[ni][nj] = 2
good_count -= 1
queue.append((ni, nj, time + 1))
return minutes if good_count == 0 else -1
def print_matrix(matrix):
for row in matrix:
print("\t".join(map(str, row)))
def main():
print("Миграция червяков по яблокам")
N = int(input("\nВведите количество строк N: "))
M = int(input("Введите количество столбцов M: "))
matrix = generate_random_matrix(N, M)
print("\nСгенерированная матрица:")
print_matrix(matrix)
good_before = count_good_apples(matrix)
print(f"Количество хороших яблок изначально: {good_before}")
result = solve_minutes(matrix)
if result == -1:
print("\nРезультат: -1 (червяки не научились летать)")
else:
print(f"\nРезультат: {result} минут")
if __name__ == "__main__":
main()