From 00d8c462bfdf73d99f633cbad01cf66d9ef2cdba Mon Sep 17 00:00:00 2001 From: marina <138340846+bt3gl-cryptographer@users.noreply.github.com> Date: Tue, 1 Aug 2023 15:21:20 -0700 Subject: [PATCH] Create matrix_bfs.py --- graphs/matrix_bfs.py | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 graphs/matrix_bfs.py diff --git a/graphs/matrix_bfs.py b/graphs/matrix_bfs.py new file mode 100644 index 0000000..1c1ca0c --- /dev/null +++ b/graphs/matrix_bfs.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + +''' +You are given an m x n grid rooms initialized with these three possible values. + +* -1 A wall or an obstacle. +* 0 A gate. +* INF Infinity means an empty room (2^31 - 1 = 2147483647 to represent INF) + +Fill each empty room with the distance to its nearest gate. +If it is impossible to reach a gate, it should be filled with INF. +''' + +def matrix_bfs(rooms: list[list[int]]) -> None: + + m = len(rooms) + if m == 0: + return rooms + n = len(rooms[0]) + + GATE = 0 + EMPTY = 2147483647 + DIRECTIONS = ((1, 0), (-1, 0), (0, 1), (0, -1)) + + q = collections.deque() + + for i in range(m): + for j in range(n): + + if rooms[i][j] == GATE: + q.append((i, j)) + + while q: + + row, col = q.popleft() + + for (x, y) in DIRECTIONS: + + r = row + x + c = col + y + + if (r < 0) or (c < 0) or (r >= m) or (c >= n) or rooms[r][c] != EMPTY: + continue + + rooms[r][c] = rooms[row][col] + 1 + q.append((r, c))