机器人运动学求解有几类基本问题,选择机器人结构时要考虑其运动结构特点及任务需求
地面上有一个行和列的网格,横坐标和纵坐标分别是和。
一个机器人从坐标网格开始移动,一次只能向左、右、上、下移动一个网格。
但是不能输入行坐标和列坐标的数字之和大于的网格。
机器人能到达多少个方格?
1个示例
输入:k=7,m=4,n=5
输出:20个样本2
输入:k=18,m=40,n=40
输出:1484
说明:当k为18时,机器人可以进入正方形(35,37),因为3 5 3 7=18。
但是,它不能进入正方形(35,38),因为3 5 3 8=19。注意:
0=m=50 0=n=50 0=k=100思路(BFS),
这是一个典型的宽度优先搜索问题。我们可以从(0,0)点开始,一次向上、下、左、右四个方向扩展新的节点。
扩展时,您应该注意新节点的以下条件:
之前没有遍历过,这个可以用一个bool数组来判断;
不出国境;
水平数字的总和小于;
最后,答案是遍历的所有合法节点的数量。
时间复杂度
每个节点最多只会加入一次团队,所以时间复杂度不会超过网格中的节点数。
最坏的情况是遍历网格中的所有点,所以时间复杂度为。
如果把整个棋盘看成一个状态,就需要回去;如果把棋盘上的每一个点都当成一种状态,就不需要回去了。
代码类解决方案{
公共:
int get_sum(pair int,int t)
{
int sum=0;
while(t.first)
{
总和=t.first;
t.first/=10;
}
while(秒)
{
总和=t.second;
t.second/=10;
}
返回总和;
}
int movingCount(int threshold,int rows,int cols)
{
if(rows==0cols==0)返回0;
队列对int,int q;
vector vector bool st(rows,vector bool (cols,false));//初始化st数组
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1 };
q.push({0,0 });
int CNT=0;
while(q.size())
{
auto t=q . front();
q . pop();
if(ST[t . first][t . second] get _ sum(t)threshold)继续;
cnt
ST[t . first][t . second]=true;
for(int I=0;I 4;我)
{
int a=t.first dx[i],b=t . second dy[I];
if(a=0 a行b=0 b列)
q.push({a,b });
}
}
返回cnt
}
};获取一般问题解决方案
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。