【问题标题】:Recursion paths from coordinate to coordinate从坐标到坐标的递归路径
【发布时间】:2011-01-14 23:07:25
【问题描述】:

我正在为一个班级分配java,但我不确定如何解决这个问题。我不希望它为我完成,但让我朝着正确的方向开始。我主要不确定程序的递归部分。我不太擅长编程。

问题:

东北路径是从一个 二维网格通过向上移动和 正确的。例如,在图中 下面,从 1,0 到有两条路径 0,1。第一个是(1,0),(0,0),(0,1), 第二个是(1,0),(1,1),(0,1)。 请注意,没有东北路径 从 (0,1) 到任何其他点。还 请注意,有一条东北路径 从 (1,1) 到 (0,1)。你要写 一个程序,需要一个数字(大小 网格 - 不大于 10) 和 起点和终点 位置并递归计算所有 “东北”路径。

0,0 0,1

1,0 1,1

我正在阅读 prog2.dat 文件

首先读取网格大小,然后是起始坐标,然后是结束坐标。例如:

5

3 0

1 3

它必须是一个文件,所以我将使用方法。如果有人可以让我开始或指导我解决已经发布的类似问题,我将不胜感激。

【问题讨论】:

  • 你确定你不是指西北吗?从 (1,0) 到 (0,0) 和 (1,1) 到 (0,1) 正在向 West 而不是向东移动。还是我误解了定义?
  • 你只能向上和向右移动,希望能解决问题。试图找出从 1,0 到 0,1 的所有路径。虽然我在实际程序中使用 5x5 网格,但 1,0 0,1 是一个示例。
  • 他的网格将 (0,0) 定义为在左上角。

标签: java recursion path point


【解决方案1】:

涉及递归的一个解决方案涉及找到路径上的下一个点,该点将使您最接近目的地。一旦你有了那个点,你就可以使用相同的方法来找出下一个最近的点,依此类推。当您到达目的地时,此过程(或递归)结束。

您可以尝试这样做:

void getNextPoint(Point start, Point end, Path currentPath) {
    //if start == end, then you're done with the recursion
    //and you have a valid path

    //if you can move east from start to get closer to end
    //Point next = east of start
    //append next to the currentPath
    //then call getNextPoint(next, end, currentPath)

    //if you can move north from start to get closer to end
    //Point next = north of start
    //append next to currentPath
    //then call getNextPoint(next, end, currentPath)
}

我省略了很多细节,以便您自己了解更多信息,但这是使用递归的一种方法。本质上,您正在构建一条路径。您必须弄清楚如何管理路径,但您可能需要能够从路径中推送和弹出点。

【讨论】:

    【解决方案2】:

    这可能会有所帮助:

    http://en.wikipedia.org/wiki/Binomial_theorem

    【讨论】:

      【解决方案3】:

      从阅读Pascal's Triangle开始。

      对于给定的起始位置 (x0, y0) 和给定的结束位置 (x1, y1),并限制自己在网格上向北或向东移动,最小长度路径将精确地由 (x1-x0 ) 向东走几步,向北走 (y1-y0) 步,按某种顺序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-22
        • 2015-05-01
        • 1970-01-01
        • 2011-02-18
        • 2012-08-20
        • 2013-10-20
        • 2016-11-04
        • 2012-04-25
        相关资源
        最近更新 更多