2024.08.18大疆后端
1. 无人机巡逻
一块地用一个从0开始素引的二维二送制矩阵block表示,其中0表示空闲地块,1表示放有障碍物购地块。
在每个测试毛列中,地的左上角永远是空闲的。一架无人机面面向右侧侧,在左上角开造巡逻。无人机将一直前进,直到抵达地的边界或遇到障碍物地时,无人机将会顺时针旋转90度并重复以上步,初始位置和无人机飞过的地块都会被之巡逻。
若无人机可以持续飞行下去,将返回被巡逻到的地块数量
递归标记已经巡逻过的位置和姿态即可
int main() {
int m,n;
cin>>m>>n;
vector<vector<int>> terrain(m,vector<int>(n));
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>terrain[i][j];
int dir[4][2] = {{1,0},{0,-1},{-1,0},{0,1}};
int diridx = 0;//一开始向右
int x = 0; int y = 0;
vector<vector<bool>> dp[4];
for(int i=0;i<4;i++)
dp[i].resize(m,vector<bool>(n,false));
int res = 0;
while(dp[x][y][diridx]!=true){
if(!dp[x][y][0]&&!dp[x][y][1]&&!dp[x][y][2]&&!dp[x][y][3]) res++;//没有访问过增加
dp[x][y][diridx] = true;
//首先尝试直走
int nx = x + dir[diridx][0];
int ny = y + dir[diridx][1];
if(nx>=0&&ny>=0&&nx<m&&ny<n&&terrain[nx][ny]==0){
x = nx;
y = ny;
}
else //顺时针旋转
diridx = (diridx+1)%4;
}
cout<<res;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本