【发布时间】:2017-11-03 22:09:09
【问题描述】:
给定一个 NxM 平面,通过三个运动找到两点之间的所有可能路径:右、下和对角线(右下,315º)。
我被这个问题困住了。我必须以两种方式解决它:递归和迭代。对于迭代,我有想法但不知道如何实现。
我的想法的描述是:
(谷歌翻译)。我们面临着一块 N 列宽和 M 行高的板。我们必须从一个点 (x1, y1) 到达另一个点 (x2, y2),所以 (xi, yj) 不能分别大于 N 或 M。移动的限制是我们只能向右移动 (1)、对角线向下 (2) 和向下 (3),每次移动我们都会在括号中分配数字。鉴于这些运动,我们意识到我们不能向左或向上,所以 x1 必须小于 x2 并且 y1 必须大于 y2。 该算法将从第一个点 (x1, y1) 开始并尝试创建三个“孩子”,每个动作一个: 右 (x1 + 1) 对角线 (x1 + 1, y1-1) 向下 (y1-1) 每个孩子被接受的条件是已经说过的,x1 = y2。
迭代将尝试从每个接受的孩子再创建 3 个孩子(每个动作一个)。
此迭代将通过每个子项的 (x1, y1) 等于 (x2, y2) 来结束。
提前致谢。
【问题讨论】:
-
你知道深度优先和广度优先的区别吗?
-
您需要计算路径还是枚举它们(创建所有路径的列表)?
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。 “我被卡住了”和“我不知道如何实施”建议您需要与本地导师进行会话,而不是 Stack Overflow。
标签: c++ algorithm recursion path iteration