深度优先搜索【DFS】(附3道题型详细解析及代码)(小白都可以看懂)

 、什么是深搜

深度优先搜索属于图算法的一种,英文缩写为DFS Depth      First       Search。其   

对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次 简单来说就是:  路走到头,不撞墙不回头

 BFS 本质就是让你在一幅「图」中找到从起点 start 到
终点 target 的最近距离。对的,就是这么朴实无华且枯
燥。BFS优化的本质是减少搜索次数或加快搜索效率。


案例:图的遍历

 

遍历如左图所示的图,图中部分结点之间有路径连接。遍历规则为:深度优先,右手路 径优先,不能重复遍历。请问遍历的结果是什么?

遍历结果:ABCDEFGHI


代码: 


while (队列不为空) {
    int u = 队首;
    弹出队首;
    for (枚举 u 的邻居) {
        更新数据
        if (...)
           添加到队首;
        else
            添加到队尾;
     }

}


小题一练: 

题目:

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

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

比如:如果机器人按照上面的规则,清扫一个 3×43×4 大小的矩形区域,那么标记数字的结果如下图所示。

再比如:如果机器人按照上面的规则,清扫一个 5×55×5 大小的矩形区域,那么标记数字的结果如下图所示。

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


 输入:

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

1<n,m<10。


 输入:

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


 样例:

输入
输出
3 1 2 3 4
4 10 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赞大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值