在阵列的相邻位置内找到最小值

时间:2017-10-29 02:48:45

标签: java arrays algorithm multidimensional-array maze

我是编码的新手,并且编码时间超过两个月。 对于我的任务,我正在逃避迷宫算法。 用户定义了一个2D数组和一个起始点,然后程序必须采用损害最小的路径才能找到出路。 " AI"可以仅向北,向东,向南或向西移动。它可以从数组的任何边缘逃脱。

Enter the starting x coordinate: 2 
Enter the starting y coordinate: 4 
0 1 4 2 6 0 1  
1 7 4 2 2 6 0  
0 0 0 8 * 4 1  
1 1 2 7 3 4 2  
5 1 6 4 2 2 1   

在此示例中,用户已选择[2,4]作为数组的起始位置(请记住,索引从0开始)。 AI可以从阵列的任何边缘逃脱。它想要为每个动作选择最小的整数。对于此示例,AI将向上移动2,然后向左移动,然后向上移动。因此,他们花了相当数量的伤害"退出阵列。

我的问题是比较北方是否小于东方,如果北方小于东方,它是否小于西方?还是南?如果东方小于北方,它是否比西方小?还是南? &安培;等等等等。 我不确定我是否以正确的方式解决这个问题。 我的尝试可以在下面的加速链接中的第44-78行找到。 我不知道我在做什么。

我创建了int minimumValue;,但我不确定如何利用它,或者在哪里。如果boardArray[north][currentY] < boardArray[east][currentY]那么boardArray[north][currentY]是我的新最小值是否正确?然后我需要编写代码来比较西方和南方的代码。我觉得必须有一个更简单的方法来解决它。

我已经尝试使用谷歌搜索解决方案,Reddit,The Coding Den不和服务器,但我根本无法解决这个问题。

任何和所有帮助将不胜感激!

https://hastebin.com/acopoborut.java

2 个答案:

答案 0 :(得分:0)

我假设通过说北方你指的是-y方向而东面你指的是+ x方向

如果boardArray[x][y]表示坐标(x,y),则其北边的坐标应为(x,y-1),东边为(x + 1,y)。您可以像这样比较它们

boardArray[x][y-1] < boardArray[x+1][y] //Is North smaller than East?

当然你首先要检查北方和东方是否都在阵列内,否则你会得到ArrayIndexOutOfBoundException

答案 1 :(得分:0)

神圣的嵌套别人的蝙蝠侠!

我会用这样的东西替换第55-78行:

//find the least danger:
int leastDanger = northDanger;
if(southDanger < leastDanger) leastDanger = southDanger;
if(eastDanger  < leastDanger) leastDanger = eastDanger;
if(westDanger  < leastDanger) leastDanger = westDanger;
// Go the first direction equal to least danger 
if      (northDanger == leastDanger) { moveNorth
}else if(southDanger == leastDanger) { moveSouth
}else if(eastDanger  == leastDanger) { moveEast
}else if(westDanger  == leastDanger) { moveWest
}

moveDirections将是您的代码,如

visitedPath = visitedPath + "[" + currentX + "," + currentY + "]";    

危险值就是你的代码

boardArray[north][currentY]

如果你知道那些,也可以用switch语句完成。