我正在为一个类进行 java 作业,我不确定如何解决这个问题。我不希望它为我完成,但让我开始朝着正确的方向前进。我大多不确定该程序的递归部分。我不擅长编程。
问题:
NorthEast路径是从a获得的 通过向上移动和二维网格 对。例如,在图中 在下面,有两条路径从1.0到 0,1。第一个是(1,0),(0,0),(0,1), 第二个是(1,0),(1,1),(0,1)。 请注意,没有NorthEast路径 从(0,1)到任何其他点。也 请注意,有一个NorthEast路径 从(1,1)到(0,1)。你要写 一个程序,取一个数字(大小的 网格 - 不大于10)和a 起始位置和结束 位置和递归计算所有 “东北”路径。
0,0 0,1
1,0 1,1
我正在阅读prog2.dat文件
首先读取网格大小,然后读取起始坐标,然后读取坐标。例如:
5
3 0
1 3
它需要是一个文件,所以我将使用方法。如果有人可以让我开始或指导我发布已发布的类似问题,我将不胜感激。
答案 0 :(得分:0)
答案 1 :(得分:0)
首先阅读Pascal's Triangle。
对于给定的起始位置(x0,y0)和给定的结束位置(x1,y1),并限制自己在网格上移动北或东,最小长度路径将精确地组成(x1-x0 )以某种顺序向东步和(y1-y0)向北步进步。
答案 2 :(得分:0)
涉及递归的一个解决方案涉及找到路径上的下一个点,使您最接近目的地。一旦你有了这一点,你就可以使用相同的方法找出下一个最近的点,依此类推。当您到达目的地时,此过程(或递归)结束。
你可以尝试做这样的事情:
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)
}
我省略了很多细节,所以你可以自己想出更多,但这是使用递归的一种方法。从本质上讲,你正在建立一条道路。你必须弄清楚如何管理你的路径,但你可能需要能够推出和弹出它们。