扫地机器人(dfs基础)

题面

Mike同学在为扫地机器人设计一个在矩形区域中行走的算法,Mike是这样设计的:先把机器人放在出发点 (1,1)(1,1) 点上,机器人在每个点上都会沿用如下的规则来判断下一个该去的点是哪里。规则:优先向右,如果向右不能走(比如:右侧出了矩形或者右侧扫过了)则尝试向下,向下不能走则尝试向左,向左不能走则尝试向上;直到所有的点都扫过。

Mike为了验证自己设计的算法是否正确,打算先模拟一下这个算法,每当机器人走过一个单元格时,会在单元格内标记一个数字,这个数字从 11 开始,每经过一个单元格数字会递增 11 ,直到所有的单元格都扫一遍,也就是所有的单元格都标记过数字,机器人会自动停止。

请你帮助Mike设计一个程序,按照上面的规则,将一个 n×m 大小的矩形,标记一下数字,输出最终标记的结果。

输入:

一行内有 22 个两个整数 n 和 m ,用空格隔开,分别代表矩形区域的行数(高)和列数(宽)。

1<n,m<10。

输出:

输出按题意机器人走过每个点之后,标记数字的结果,每个数字输出时场宽设置为 3。

链接:Link. 

 最基础的dfs题,根据题目右,下,左,上得顺序递归即可(要注意不能出边界和不重复走)

解法1:递归前暴力判断

#include <bits/stdc++.h>
using namespace std;
int n , m;
int a[20][20];
void dfs(int x , int y , int k){
	a[x][y] = k;
	if (y + 1 <= m && a[x][y+1] == 0 )
		dfs(x , y + 1 , k + 1);
	if (x + 1 <= n && a[x+1][y] == 0 )
		dfs(x + 1 , y  , k + 1);
	if (y - 1 >= 1 && a[x][y-1] == 0 )
		dfs(x , y - 1 , k + 1);
	if (x - 1 >= 1 && a[x-1][y] == 0 )
		dfs(x - 1 , y , k + 1);
}

int main(){
	scanf("%d%d" , &n , &m);
	dfs(1,1,1);
	for ( int i = 1 ; i <= n ; i++ ){
		for ( int j= 1 ; j <= m ; j++ )
			cout << setw(3) << a[i][j];
		printf("\n");
	}
	return 0;
}

解法2:在递归前先大判断再暴力尝试

#include <bits/stdc++.h>
using namespace std;
int n , m;
int a[20][20];
void dfs(int x , int y , int k){
	if(x >= 1 && x <= n && y >= 1 && y <= m && a[x][y] == 0 ){
		a[x][y] = k;
		dfs(x , y + 1  , k + 1);
	
		dfs(x + 1 , y  , k + 1);
	
		dfs(x , y - 1  , k + 1);

		dfs(x - 1 , y  , k + 1);
	}
	
}
  
int main(){
	scanf("%d%d" , &n , &m);
	dfs(1,1,1);
	for ( int i = 1 ; i <= n ; i++ ){
		for ( int j= 1 ; j <= m ; j++ )
			cout << setw(3) << a[i][j];
		printf("\n");
	}
	return 0;
}

 解法3:在递归前先大判断再用方向数组+循环尝试

#include <bits/stdc++.h>
using namespace std;
int n , m;
int a[20][20];
int fx[5] = {0 , 0 , 1 , 0 , -1} , fy[5] = {0 , 1 , 0 , -1 , 0};
void dfs(int x , int y , int k){
	if(x >= 1 && x <= n && y >= 1 && y <= m && a[x][y] == 0 ){
		a[x][y] = k;
		int tx , ty;
		for ( int i = 1 ; i <= 4 ; i++ ){
			tx = x + fx[i];
			ty = y + fy[i];
			dfs(tx , ty , k+1);
		}
	}
	
}
  
int main(){
	scanf("%d%d" , &n , &m);
	dfs(1,1,1);
	for ( int i = 1 ; i <= n ; i++ ){
		for ( int j= 1 ; j <= m ; j++ )
			cout << setw(3) << a[i][j];
		printf("\n");
	}
	return 0;
}

 解法4:用方向数组+循环尝试 (在每次递归前判断决定是否递归)

#include <bits/stdc++.h>
using namespace std;
int n , m;
int a[20][20];
int fx[5] = {0 , 0 , 1 , 0 , -1} , fy[5] = {0 , 1 , 0 , -1 , 0};
void dfs(int x , int y , int k){

	a[x][y] = k;
	int tx , ty;
	for ( int i = 1 ; i <= 4 ; i++ ){
		tx = x + fx[i];
		ty = y + fy[i];			
		if(tx >= 1 && tx <= n && ty >= 1 && ty <= m && a[tx][ty] == 0 )
			dfs(tx , ty , k+1); 
	}
	
}
  
int main(){
	scanf("%d%d" , &n , &m);
	dfs(1,1,1);
	for ( int i = 1 ; i <= n ; i++ ){
		for ( int j= 1 ; j <= m ; j++ )
			cout << setw(3) << a[i][j];
		printf("\n");
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 扫地机器人路径规划的代码c,需要实现机器人在环境自主规划路径,避免障碍物并完成清洁任务。以下是一个基本的路径规划代码c框架: 1. 定义机器人起始点和目标点位置。 2. 定义环境地图,包括所有的障碍物的位置。 3. 采用A*寻路算法,计算机器人在环境的最短路径。 4. 根据机器人实时位置和前方障碍物位置更新A*算法的地图。 5. 实现对机器人状态的检测,包括未清洁区域、清洁进度和电量等。 6. 根据机器人状态优化路径规划策略,保证机器人高效地完成任务。 7. 实现路径跟踪控制,控制机器人在环境行走,避免障碍物碰撞。 8. 完成清扫任务后,将机器人放回充电座,等待下一次使用。 以上是一个简单的扫地机器人路径规划代码c框架,可以根据实际需要进行优化和完善,以实现更高效的智能路径规划。 ### 回答2: 扫地机器人是一种智能化家电,能够自动化扫地和清洁房间,为人们节省了时间和精力。但是扫地机器人能否高效率地完成清洁任务,关键在于其路径规划代码的设计。 路径规划代码c的设计需要考虑机器人在清洁过程应当遵循的一些规则:避障原则、自适应性原则、历史性原则和时间优先原则。避障原则是指机器人在行驶时要避免障碍物,需要利用传感器感知周围障碍物的位置和距离,并在遇到障碍物时进行相应的规避。自适应性原则是指机器人应能自适应地调整清洁路径,根据房间大小和布局情况来选择合适的路径,避免重复清洁同一区域。历史性原则是指机器人应能记住已经清洁过的区域,避免重复清洁。时间优先原则是指机器人应根据时间利用率来规划清洁路径,通过选择效率最高的路径来减少清洁时间。 在代码设计和开发方面,可以使用深度学习算法来优化路径规划代码。通过训练机器人在不同情况下的应对能力,使其能够更加智能地完成清洁任务。同时,还可采用复杂网络和算法优化等技术来提高路径规划的准确性和效率。 总之,扫地机器人路径规划代码c是机器人清洁任务的关键所在,需要设计师们在机器人应对随机性和自由度方面更加深入的研究和探索。只有这样才能让扫地机器人真正成为人们生活的贴心小帮手。 ### 回答3: 扫地机器人路径规划是机器人领域非常重要的一部分,其目的是使机器人能够自主地选择最优的路径,从而更高效地完成任务。路径规划代码的实现需要涉及机器人感知、控制、决策等多个方面。 一般来说,扫地机器人的路径规划代码可包括以下几个步骤: 1.构建环境地图。扫地机器人需要先检测环境的障碍物和可通行区域,然后将其表示在地图上,以便机器人进行路径规划。环境地图可以使用二维数组或栅格地图来表示。 2.设定起始点和目标点。在环境地图,机器人需要设置起始点和目标点,以确定路径规划的起点和终点。 3.使用搜索算法进行路径规划。路径规划代码可以使用BFS、DFS、A*等搜索算法。搜索算法会在环境地图上不断寻找可行的路径,并计算各路径的代价值以便选择最优路径。 4.对路径进行优化。搜索算法得到的路径可能不是最优路径,需要对其进行优化,减少路径长度和时间代价。可使用曲线平滑、路径削减等方法进行优化。 5.执行路径。最后,机器人将根据规划代码得到的路径执行任务,并在过程进行实时调整和反馈。 综上所述,扫地机器人路径规划代码是一个涉及多个方面的复杂问题,需要结合机器人系统的实际情况进行设计和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值