一道简单的算法题
给定起点坐标(x0,y0)和终点坐标(x1,y1),其中x0,y0,x1,y1为整数且,x0<x1,y0<y1,假设从起点出发,每次只能沿x正方向或者y正方向走一个单位距离,请编程实现从起点到终点的所有路径
例如起点(0,0)终点(1,1)
路径如下:
(0,0)(0,1)(1,1)
(0,0)(1,0) (1,1)
………………………………………………………………………………………………………………………………
我说下我当时的思路,从终点往前推一步,要么从x轴走到终点要么从y轴走向终点,然后依次类推。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这真的能算算法题吗。。你要求都是所有路径了,那就是要遍历了。遍历你不管是正着想还是倒着想复杂度应该都是一样的。
更新:
你的想法是可以的,用一个简单的递归就好。
当开始和结束有一个轴一样且另一个轴之差1的时候,你就把返回一个路径集,只包含一个路径:(开始点,终点)。
比如开始:
(0, 0)
,结束:(0, 1)
,就返回{ { (0,0), (0,1) } }
。开始(0, 0)
,结束(1, 0)
的话就是{ { (0,0), (1,0) } }
。如果不能一步走到,就拿该点左边所有路径的集合,给每一个路径结尾加上当前点,该点下面的所有路径结尾也加上当前点,然后合在一起。
比如开始:
(0, 0)
,结束:(1, 1)
,就拿左边的结果加上当前点,也就是{ { (0,0), (0,1), (1,1) } }
,和下面的结果加上当前点,也就是{ { (0,0), (1,0), (1,1) } }
,合成一个集合,也就是{ { (0,0), (0,1) }, { (0,0), (1,0) } }
。当然这样会有很多重复的计算,比如你算从
(0, 0)
到(5, 5)
的时候会算2次(4, 4)
,以及很多很多次(1, 1)
,不过那个优化我就不在这里讲了,你可以看看这篇文章。input :
0 0
3 3
output:
(0,0) (1,0) (2,0) (3,0) (3,1) (3,2) (3,3)
(0,0) (1,0) (2,0) (2,1) (3,1) (3,2) (3,3)
(0,0) (1,0) (2,0) (2,1) (2,2) (3,2) (3,3)
(0,0) (1,0) (2,0) (2,1) (2,2) (2,3) (3,3)
(0,0) (1,0) (1,1) (2,1) (3,1) (3,2) (3,3)
(0,0) (1,0) (1,1) (2,1) (2,2) (3,2) (3,3)
(0,0) (1,0) (1,1) (2,1) (2,2) (2,3) (3,3)
(0,0) (1,0) (1,1) (1,2) (2,2) (3,2) (3,3)
(0,0) (1,0) (1,1) (1,2) (2,2) (2,3) (3,3)
(0,0) (1,0) (1,1) (1,2) (1,3) (2,3) (3,3)
(0,0) (0,1) (1,1) (2,1) (3,1) (3,2) (3,3)
(0,0) (0,1) (1,1) (2,1) (2,2) (3,2) (3,3)
(0,0) (0,1) (1,1) (2,1) (2,2) (2,3) (3,3)
(0,0) (0,1) (1,1) (1,2) (2,2) (3,2) (3,3)
(0,0) (0,1) (1,1) (1,2) (2,2) (2,3) (3,3)
(0,0) (0,1) (1,1) (1,2) (1,3) (2,3) (3,3)
(0,0) (0,1) (0,2) (1,2) (2,2) (3,2) (3,3)
(0,0) (0,1) (0,2) (1,2) (2,2) (2,3) (3,3)
(0,0) (0,1) (0,2) (1,2) (1,3) (2,3) (3,3)
(0,0) (0,1) (0,2) (0,3) (1,3) (2,3) (3,3)