首页 > 8.22 腾讯笔试第五题
头像
谁能给我个offer啊
发布于 2021-08-22 22:24
+ 关注

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]))

全部评论

(1) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐