用JAVA解决一个难题。下面的描述中提到了挑战。我面临的逻辑错误也在下面的描述中

用JAVA解决一个难题。下面的描述中提到了挑战。我面临的逻辑错误也在下面的描述中,java,Java,卢卡什非常喜欢定向运动,这项运动需要在崎岖的地形上确定控制点。为了娱乐NWERC参与者,卢卡什想组织一场定向比赛。然而,在瑞典11月这样寒冷的天气里,参赛者在室外太难了,因此他决定跳上室内比赛的新潮流,将比赛安排在林克平大学B楼内进行 卢卡什已经决定了控制点的位置。他还决定了比赛的确切长度,所以剩下的唯一事情就是决定访问控制点的顺序,以便整个比赛的长度符合他的意愿。因为这并不总是可能的,他要求你写一个程序来帮助他 输入格式 输入包括: 一行两个整数n2≤ N≤ 14和L 1≤ L≤ 1015,控

卢卡什非常喜欢定向运动,这项运动需要在崎岖的地形上确定控制点。为了娱乐NWERC参与者,卢卡什想组织一场定向比赛。然而,在瑞典11月这样寒冷的天气里,参赛者在室外太难了,因此他决定跳上室内比赛的新潮流,将比赛安排在林克平大学B楼内进行

卢卡什已经决定了控制点的位置。他还决定了比赛的确切长度,所以剩下的唯一事情就是决定访问控制点的顺序,以便整个比赛的长度符合他的意愿。因为这并不总是可能的,他要求你写一个程序来帮助他

输入格式

输入包括:

一行两个整数n2≤ N≤ 14和L 1≤ L≤ 1015,控制点的数量和比赛的预期长度; n行,每个行有n个整数。第i行上的第j个整数dij表示控制点i和j1之间的距离≤ dij≤ L表示i6=j,而dii=0。全部1≤ i、 j,k≤ N情况是dij=dji和dij≤ dik+dkj。 输出格式

如果可以按某种顺序访问所有控制点一次,并直接返回到第一个控制点,使总距离正好为L,则输出一行“可能”,否则为“不可能”

样本输入

3 5
0 1 3
1 0 3
4 1 0
样本输出

possible
代码的问题在于,checkscenario函数的else循环中的for循环只考虑第一次迭代,结果返回false。它不会检查下一次迭代,下一次迭代将返回true,从而给出正确的解决方案

让我们使用示例输入进行解释。最初,函数获取参数值,如下所示:-

controlptsleft={0,1,2,3}

//这些是尚未访问的控制点

指数=0

//这是我所在的控制点

控制矩阵=

0 1 3
1 0 3
4 1 0
L=5

//所需的长度

总和=0

//到目前为止,我们还没有落后于控制点。所以,sum=0


万一有人想知道,我想出了这个挑战的答案

首先,我要感谢汉诺·宾德的评论。我意识到我错在哪里了

在函数checkscenario的else循环中

我所做的是,我直接将controlptsleft的引用复制到tempList。我意识到了这个错误,于是我初始化了tempList,并使用.addAll将controlptsleft中的所有值放入tempList。 下面的代码说明了我上面的意思

else{
        for(int i=0;i<controlptsleft.size();i++){
            int temp = controlmatrix[row][controlptsleft.get(i)];
            ArrayList<Integer> tempList = new ArrayList<Integer>();
            tempList.addAll(controlptsleft);
            boolean finalres = checkscenario(tempList,i,controlmatrix,L,(sum + temp));
            if(finalres)
                return true;
        }
    }

如果有人有更好的JAVA解决方案来应对上述挑战。请随意发布他们的代码,这样我就可以学习如何更好地编写代码。

你最好将关于作业的样板文章从问题中删除,只关注你真正关心的部分。我只是略读了一下,并仅基于这一点对您的提问进行了假设,这并不是很好,但无论如何都很常见。使用非描述性变量名(例如n、L、temp)跟踪此代码非常困难。如果您更改它,则更容易理解。controlptsleft.removeindex;forint i=0;我
else{
        for(int i=0;i<controlptsleft.size();i++){
        int temp = controlmatrix[row][controlptsleft.get(i)];
        ArrayList<Integer> tempList = controlptsleft;
        boolean finalres = checkscenario(tempList,i,controlmatrix,L,(sum + temp));
        if(finalres)
            return true;
    }
else{
        for(int i=0;i<controlptsleft.size();i++){
            int temp = controlmatrix[row][controlptsleft.get(i)];
            ArrayList<Integer> tempList = new ArrayList<Integer>();
            tempList.addAll(controlptsleft);
            boolean finalres = checkscenario(tempList,i,controlmatrix,L,(sum + temp));
            if(finalres)
                return true;
        }
    }