8.22 腾讯笔试第五题
题目:把被1围住的区域,变成2(注意外侧虽然有0被1围住了一部分,但是并不能变成2)
思路:外部往里回溯,就相当于从外边往里侵蚀,但是侵蚀不到被1围起来的区域。从里往外很难判断。
参考LC417洋流问题。
输入样例: 6 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 输出; 0 1 0 0 1 0 1 2 1 1 2 1 0 1 2 2 1 0 0 1 2 2 1 0 1 2 1 1 2 1 0 1 0 0 1 0 Process finished with exit code 0
def recurCore(grid, x, y, n): if x < 0 or x >= n or y < 0 or y >= n or grid[x][y] == 1 or grid[x][y] == -1: return grid[x][y] = -1 #被侵蚀到的先置为-1, 等待最后的处理。 recurCore(grid, x + 1, y, n) recurCore(grid, x - 1, y, n) recurCore(grid, x, y + 1, n) recurCore(grid, x, y - 1, n) return n = int(input()) grid = [[0] * n for _ in range(n)] for i in range(n): grid[i] = [int(x) for x in input().split()] visi = [[False] * n for _ in range(n)] for i in range(0, n): recurCore(grid, i, 0, n) recurCore(grid, i, n - 1, n) for i in range(0, n): recurCore(grid, 0, i, n) recurCore(grid, n-1, i, n) for i in range(n): for j in range(n): if grid[i][j] == -1: grid[i][j] = 0 elif grid[i][j] == 0: grid[i][j] = 2 def row2str(row): s = '' for a in row: s += str(a) + ' ' return s[:-1] for i in range(n): print(row2str(grid[i]))#腾讯笔试##笔试题目##腾讯#