LCP 03. 机器人大冒险-力扣双百代码
2023-09-14 09:06:49 时间
LCP 03. 机器人大冒险-力扣双百代码
力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:
U: 向y轴正方向移动一格
R: 向x轴正方向移动一格。
不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。
给定终点坐标(x, y),返回机器人能否完好地到达终点。如果能,返回true;否则返回false。
示例 1:
输入:command = “URR”, obstacles = [], x = 3, y = 2
输出:true
解释:U(0, 1) -> R(1, 1) -> R(2, 1) -> U(2, 2) -> R(3, 2)。
示例 2:
输入:command = “URR”, obstacles = [[2, 2]], x = 3, y = 2
输出:false
解释:机器人在到达终点前会碰到(2, 2)的障碍物。
示例 3:
输入:command = “URR”, obstacles = [[4, 2]], x = 3, y = 2
输出:true
解释:到达终点后,再碰到障碍物也不影响返回结果。
这题感觉用c语言做还是很麻烦的,解题代码如下:
bool counter_obstacles2(int x,int y,int** obstacles, int obstaclesSize){
for(int i=0;i<obstaclesSize;i++){
if(x==obstacles[i][0]&&y==obstacles[i][1]){
return true;
}
}
return false;
}
bool counter_obstacles(int x,int y,int obstaclesx,int obstaclesy,char *command){
int len=strlen(command);
int process[len+1][2];
process[0][0]=x;
process[0][1]=y;
if(x==obstaclesx&&y==obstaclesy){
return true;
}
for(int i=1;i<len+1;i++){
if(command[i-1]=='U'){
process[i][0]=process[i-1][0];
process[i][1]=process[i-1][1]+1;
}
else{
process[i][0]=process[i-1][0]+1;
process[i][1]=process[i-1][1];
}
if(process[i][0]==obstaclesx&&process[i][1]==obstaclesy){
return true;
}
}
return false;
}
bool robot(char * command, int** obstacles, int obstaclesSize, int* obstaclesColSize, int x, int y){
int len=strlen(command);
int process[len+1][2];
process[0][0]=0;
process[0][1]=0;
for(int i=1;i<len+1;i++){
if(command[i-1]=='U'){
process[i][0]=process[i-1][0];
process[i][1]=process[i-1][1]+1;
}
else{
process[i][0]=process[i-1][0]+1;
process[i][1]=process[i-1][1];
}
//
}
int minx=process[len][0];
int miny=process[len][1];
int cir_num=fmin(x/minx,y/miny);
for(int i=0;i<obstaclesSize;i++){
int cir_nump=fmin(obstacles[i][0]/minx,obstacles[i][1]/miny);
int startx=cir_nump*minx+0;
int starty=cir_nump*miny+0;
if(cir_nump<cir_num){
if(counter_obstacles(startx,starty,obstacles[i][0],obstacles[i][1],command)){
return false;
}
}
}
int startx=cir_num*minx+0;
int starty=cir_num*miny+0;
process[0][0]=startx;
process[0][1]=starty;
for(int i=1;i<len+1;i++){
if(command[i-1]=='U'){
process[i][0]=process[i-1][0];
process[i][1]=process[i-1][1]+1;
}
else{
process[i][0]=process[i-1][0]+1;
process[i][1]=process[i-1][1];
}
if(counter_obstacles2(process[i][0],process[i][1],obstacles,obstaclesSize)){
return false;
}
if(process[i][0]==x&&process[i][1]==y){
return true;
}
// printf("%d %d|",process[i][0],process[i][1]);
}
if(counter_obstacles(startx,starty,x,y,command)){
return true;
}
return false;
}
相关文章
- 机器人单关节力矩控制
- java实现机器人行走
- 云拨测助力节卡机器人 全面优化海外网站性能
- 机器人跳跃问题(整数二分)
- AI:2020年6月22日北京智源大会演讲分享之机器感知专题论坛—15:30-16:10孙富春教授《机器人视触觉传感器与主动感知》
- Interview:算法岗位面试—11.07早上上海某机器人公司(上市)面试之项目考察、比赛考察、图像算法的考察等
- AI之Robot:带你玩转机器人&DIY机器人——让你成为机器人的真正主人
- Py:编写程序代码,把自己的微信号变为微信智能机器人自动和你的好友、群友聊天
- 基于Dijkstra和A*算法的机器人路径规划(Matlab代码实现)
- 水下机器人双机械手系统动态建模与控制仿真(Matlab代码实现)
- 蓝桥杯2015决赛——机器人数目(Java)
- python 调用图灵机器人api实现简单的人机交互
- 用Java代码编程实现模拟机器人对话
- 如何解决`Curl` 调用钉钉机器人字符串中空格的问题?
- 【qq机器人】音乐分享
- 机器人C++库(11)Robotics Library 之指定路径规划算法
- python自然语言处理(五)chatterbot 搭建自动聊天机器人