用方向序列:右、下、左、上(顺时针)。
使用状态 (r, c, dir)
来判定是否进入循环。若某状态重复出现,则之后的路径将周期性重复,覆盖的去重格子数不再增加,可以停止。
维护:
visitedCell[r][c]
:该格子是否曾被巡逻过(用于统计去重数量)。seen[r][c][dir]
:该位置且该朝向是否出现过(用于判环)。每轮:
一块地用一个从 0 开始索引的二维二进制矩阵 block 表示,其中 0 表示空闲地块,1 表示放有障碍物的地块。在每个测试用例中,地的左上角永远是空闲的。一架无人机面向右侧,从左上角开始巡逻。无人机将一直前进,直到抵达的边界或遇到障碍物地块时,无人机将会顺时针旋转 90 度并重复以上步骤,初始位置和无人机飞过的地块都会被它巡逻。
若无人机可以持续飞行下去,输出被巡逻到的地块数量。