我有一个用Java编写的路径查找功能,需要一些工作。
我有一系列弹簧棍,每个都有自己的跳跃距离"。例如,具有值5
的弹簧针可以"跳跃" (移动)5个空格。我还有一个totalDistance
变量,用于保存需要移动的距离。
用户通过键盘提供输入,其中第一个整数是距离,剩余的整数是pogo棒距离。可以根据需要多次使用相同的弹簧棍,同样地,弹跳棍的移动距离大于1。不需要totalDistance。
我的算法几乎按预期工作,虽然它会跳过某些组合,因为循环的迭代首先找到不同的算法,因此忽略了其他路径的潜力。
我需要基本上检查一下路径是否已经计算过,然后忽略弹跳杆的当前迭代并移动到下一个。
有人可以帮忙吗?下面是我查找路径的算法。
/*
* First integer in input
*/
int totalDistance;
/*
* The remaining integers in the input
*/
ArrayList<Integer> pogoSticks = new ArrayList<Integer>();
private void findPaths() {
ArrayList<ArrayList<Integer>> possibleSticks = new ArrayList<ArrayList<Integer>>();
for (int i = 0; i < pogoSticks.size(); i++) {
int pogoStickDistance = pogoSticks.get(i);
if (pogoStickDistance == totalDistance) {
if (!possibleSticks.contains(new ArrayList<Integer>(pogoStickDistance))) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(pogoStickDistance);
possibleSticks.add(list);
}
} else if (pogoStickDistance < totalDistance) {
int remainingDistance = totalDistance;
ArrayList<Integer> possibleSubSticks = new ArrayList<Integer>();
possibleSubSticks.add(pogoStickDistance);
remainingDistance -= pogoStickDistance;
for (int j = 0; j < pogoSticks.size(); j++) {
int pogoStickDistance1 = pogoSticks.get(j);
if (pogoStickDistance1 == remainingDistance) {
System.out.println(remainingDistance);
possibleSubSticks.add(pogoStickDistance1);
possibleSticks.add(possibleSubSticks);
break;
} else if (pogoStickDistance1 < remainingDistance) {
possibleSubSticks.add(pogoStickDistance1);
remainingDistance -= pogoStickDistance1;
}
if (j == (pogoSticks.size() - 1) && pogoStickDistance1 != remainingDistance) {
j = 0;
}
}
}
}
System.out.println(possibleSticks);
}
输出:
Enter input: 5 5 10 1 3
[[5], [1, 1, 3], [3, 1, 1]]
前5个是距离,其他数字是pogo棒距离。
我遗漏了诸如[1, 1, 1, 1, 1]
和[1, 3, 1]