Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
骑士最少的移动量调试Java_Java_Shortest Path - Fatal编程技术网

骑士最少的移动量调试Java

骑士最少的移动量调试Java,java,shortest-path,Java,Shortest Path,基本上,我需要找到骑士在编号为0-63(含0-63)的8x8网格上达到特定位置所需的最小移动量 我已经交叉检查了我能想到的所有测试用例,每个测试用例都正是我想要的。我使用了一种消除和放置算法,该算法模仿O1解决方案,但用于骑士 我收到的关于这个问题的测试用例是保密的,我只能猜测我遗漏了什么。当我尝试验证代码时,我收到以下输出: 测试一通过! 测试2失败。 测试3通过了! 测试4失败。 测试5失败。 测试6失败。 测试7失败。 测试8失败。 测试9失败。 测试10失败 代码: 我用O1模型检查我的

基本上,我需要找到骑士在编号为0-63(含0-63)的8x8网格上达到特定位置所需的最小移动量

我已经交叉检查了我能想到的所有测试用例,每个测试用例都正是我想要的。我使用了一种消除和放置算法,该算法模仿O1解决方案,但用于骑士

我收到的关于这个问题的测试用例是保密的,我只能猜测我遗漏了什么。当我尝试验证代码时,我收到以下输出:

测试一通过! 测试2失败。 测试3通过了! 测试4失败。 测试5失败。 测试6失败。 测试7失败。 测试8失败。 测试9失败。 测试10失败

代码:

我用O1模型检查我的答案:

输出示例结束值的答案是:src=63,dest=30:

0 1 2 3 4 5 6 7 
8 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 23 
24 25 26 27 28 29 30 31 
32 33 34 35 36 37 38 39 
40 41 42 43 44 45 -1 47 
48 49 50 51 52 -1 54 55 
56 57 58 59 60 61 62 -1 
--------------------
0 1 2 3 4 5 6 7 
8 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 23 
24 25 26 27 28 -1 30 -1 
32 33 34 35 -1 37 -1 39 
40 41 42 -1 44 45 -1 -1 
48 49 50 51 -1 -1 54 55 
56 57 58 -1 60 -1 62 -1 
--------------------
0 1 2 3 4 5 6 7 
8 9 10 11 -1 13 -1 15 
16 17 18 -1 20 -1 22 -1 
24 25 -1 27 -1 -1 30 -1 
32 -1 34 -1 -1 -1 -1 -1 
40 41 -1 -1 -1 45 -1 -1 
48 -1 50 -1 -1 -1 54 -1 
56 57 -1 -1 -1 -1 -1 -1 
--------------------
3 <----Answer
请告诉我我错过了什么。谢谢

编辑:


int src和int dest不会在运行时硬编码。这些值将替换为参数值。这些值是为了测试而硬编码的。

恐怕您的程序每次打印3。这是因为您已将源硬编码为方框63,目标硬编码为方框30。巧合的是,其中两个测试用例的答案确实是3。这是一个合理的猜测。所以你通过了这两个,其余的都不及格


相反,您当然应该以作业中指定的任何方式阅读输入。

事实证明,这段代码是一个完美的解决方案,只是测试用例显然是在一段连续的代码中测试的

例如,使一个单独的方法允许我调用这段代码:

public static void main (String[] args) {
    //Test Cases
    System.out.println(answer(63,5));
    System.out.println(answer(19,4));
    System.out.println(answer(63,0));
}
这将打印出:

5
0
0
在进一步调试之后,我发现导致前导零的原因是忽略了代码顶部找到的变量。因此,导致了完全错误的答案

以前的代码:

while(!found && arr[loc[0]][loc[1]] != dest)
{
    productMatrix = createknights(arr, loc[0], loc[1], dest);
    printMatrix(productMatrix);
    System.out.println("--------------------");
    finalNumber++;
}

System.out.println(finalNumber);
新代码:

while(!found && arr[loc[0]][loc[1]] != dest)
{
    productMatrix = createknights(arr, loc[0], loc[1], dest);
    printMatrix(productMatrix);
    System.out.println("--------------------");
    finalNumber++;
}

found = false;

System.out.println(finalNumber);
因此,现在转达正确答案


感谢Ole V.V.集思广益提出解决方案!我想我只是需要一些时间远离这个问题和一些想法。

我不太容易在您的代码中看到任何问题。除了,它不读取任何输入,那么它如何“知道”测试用例是什么呢?您收到的测试用例和您的程序之间的交互如何?在运行时,如果编写了空方法,我会将代码放入另一个程序中。该方法在参数中包含两个值。这些值是src和dest。在测试过程中,int src=63和int dest=39将被删除,因为参数提供了所需的值。嗨@BrandanDerby,错误的来源是否在您描述的替换机制中?在一个程序中搜索错误是有点困难的,因为它不是一个或至少不是显示不需要的行为的版本。您可能希望发布测试时的程序外观。您是对的!我甚至没有想到,当我替换这些值时,有些东西甚至会出错。替换很简单,但在服务器端检查数据的方式不同。程序将检查设置中的多个值,而不是检查单个值并重置。事实证明,在进一步的情况下,发现的变量会导致前导零,因为每次检查后它都没有重置。谢谢对不起,但事实并非如此。我确保在运行时测试时将src和destination更改为所需的参数。如果我不这么想,那我就太傻了。谢谢你分享你的解决方案,我相信你也会接受的。
while(!found && arr[loc[0]][loc[1]] != dest)
{
    productMatrix = createknights(arr, loc[0], loc[1], dest);
    printMatrix(productMatrix);
    System.out.println("--------------------");
    finalNumber++;
}

found = false;

System.out.println(finalNumber);