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]))#腾讯笔试##笔试题目##腾讯#
美的集团公司福利 742人发布