Source code for tryalgo.dist_grid

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""\
Distances in a grid

jill-jenn vie et christoph durr - 2014-2018
"""

from collections import deque


# snip{
[docs] def dist_grid(grid, source, target=None): """Distances in a grid by BFS :param grid: matrix with 4-neighborhood :param (int,int) source: pair of row, column ind_ices :param (int,int) target: exploration stops if target is reached :complexity: linear in grid size """ rows = len(grid) cols = len(grid[0]) i, j = source grid[i][j] = 's' Q = deque() Q.append(source) while Q: i1, j1 = Q.popleft() for di, dj, symbol in [(0, +1, '>'), (0, -1, '<'), (+1, 0, 'v'), (-1, 0, '^')]: # explore all directions i2 = i1 + di j2 = j1 + dj if not (0 <= i2 < rows and 0 <= j2 < cols): continue # reached the bounds of the grid if grid[i2][j2] != ' ': # inaccessible or already visited continue grid[i2][j2] = symbol # mark visit if (i2, j2) == target: grid[i2][j2] = 't' # goal is reached return Q.append((i2, j2))
# snip}