一种基于回溯的路径寻找算法
来源:互联网 发布:php抢红包源代码 编辑:程序博客网 时间:2024/06/10 04:24
网格上的机器人:想象一个机器人坐在有r行c列的网格的左上角。这个机器人只能在两个方向移动,向右和向下。有些格子是关闭的,机器人不能移动到这些格子上。设计一个找到一条让机器人从左上角移动到右下角路径的算法。
这里假设有个4X4的网格,有2个带有阴影的格子是关闭的。
算法的思想如下:
从右下角进行回溯,反向寻找路径,直到左上角
1.如果当前格子是左上角,结束返回
2.如果当前格子左边的格子是开放的,把“向右”这条路径保存到栈里面
3.如果当前格子上面的格子是开放的,把“向下”这条路径保存到栈里面
4.如果当前格子左边和上面都是封闭的,删掉栈顶的一条路径并回溯
算法的Python代码实现如下:
row, col = 4, 4a = [[0 for x in xrange(col)] for y in xrange(row)]a[1][0] = 1a[2][2] = 1r = []def f(m,n): if m==0 and n==0: return if a[m][n-1]==0 and n>=1: r.append("right") return f(m,n-1) if a[m-1][n]==0 and m>=1: r.append("down") return f(m-1,n) if m==0 and a[m][n-1]==1: a[m][n]=1 del r[len(r)-1] if n==(col-1): return f(m+1, n) else: return f(m, n+1) if n==0 and a[m-1][n]==1: a[m][n]=1 del r[len(r)-1] if m==(row-1): return f(m, n+1) else: return f(m+1, n)f(row-1, col-1)r.reverse()print r
['right', 'down', 'down', 'down', 'right', 'right']
[Finished in 0.1s]
0 0
- 一种基于回溯的路径寻找算法
- 算法竞赛入门第七章:回溯与路径寻找
- 基于回溯法寻找哈密顿回路
- 回溯算法 8皇后问题的一种解法 适合初学者观察整个回溯的过程
- 寻找的一种感觉
- 寻找的一种感觉
- 寻找链表中间节点-一种高效的算法
- 寻找链表中间节点-一种高效的算法
- 寻找链表中间节点—一种高效的算法
- 寻找一种易于理解的一致性算法(扩展版)
- 寻找一种易于理解的一致性算法(扩展版)
- 寻找一种易于理解的一致性算法(扩展版)
- 增加回溯的最短路径算法的matlab实现
- 一种基于喊话模式的排序算法
- PersonalRank:一种基于图的推荐算法
- 基于深度遍历DFS思想实现寻找两点间所有简单路径的寻找
- A*路径寻找算法入门
- A*路径寻找算法入门
- 经典技术文章
- C语言snprintf()函数:将格式化的数据写入字符串—sprintf()
- MySQl拒绝访问
- 输入十个整数,按从小到大的顺序输出
- 自定义控件:3D画廊Gallery
- 一种基于回溯的路径寻找算法
- PROCESS EXPLORER
- Python强制关闭线程的一种办法(可行已用于项目)
- 队列
- 平板不用修了,不用
- ubuntu 双显卡 深度学习 登录后黑屏花屏问题解决
- Android面试题(2)
- 最短路径问题
- 单例模式