2017-10-29 95 views
0

的相邻位置内最小值我是新来的编码,并没有被编码两个多月。 对于我的任务,我正在逃避迷宫算法。 的用户定义的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,然后离开然后向上。因此,退出阵列需要总共“6点伤害”。

我的问题是比较北是否比东部小,即使比北东较小,它比西方更小?还是南?如果东比北小,它是小于西?还是南? &等等等等。 我不确定我是否以正确的方式解决此问题。 我的尝试可以在下面的hastebin链接的第44-78行找到。 我不知道我在做什么。

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

我试着用搜索引擎解决方案,reddit的,编码书房不和谐的服务器,但我根本无法下来。

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

https://hastebin.com/acopoborut.java

+1

什么是“破坏性最小的路线”,如何比较“北方是否小于东方”?问题的定义不明确。 – alfasin

+0

欢迎来到Stackoverflow。什么alfasin说是真的。您的问题定义不明确。用您在评论部分发布的详细信息更新您的答案。另外,发布你认为重要的代码片段,同时在问题本身中定义问题,就像你说的第44-78行。这将帮助其他人快速完成迄今为止所尝试的内容。 –

+0

你还没有解释“破坏性最小的路线”是什么意思,路线从哪里到哪里?入口点在哪里?出口点在哪里?你如何确定他们。正如Sajib所写:请在评论部分中改进对帖子本身中*问题的描述。如果你不打扰让你的问题容易理解并遵循人们不会理会帮助你...帮助我们帮助你! – alfasin

回答

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语句完成。

+0

这是在20分钟内完成的,我花了很长时间去咨询Stackoverflow,所以我最终只得到部分学分。 但是我仍然想为了我自己的学习而完成这个任务。 现在,我完全考虑最初将minValue(leastDanger)设置为'Integer.MAX_VALUE',但如果有人测试边缘案例决定他们想在他们的数组中输入荒谬的整数呢? 当northDanger和eastDanger是同一个整数时会发生什么? –

+0

从Integer.MAX_VALUE开始是一个好主意。用户将无法输入比数组大的可笑值。如果按照上述编码,则将采用与最少的丹格尔相匹配的第一方向。所以如果北丹格尔和东丹格尔都等于丹格尔,那么它会走向北方。 – JeffBship

+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

+0

Ah是我的参数N/E/S/W倒退?我很抱歉。我的印象是x + -1对应于上下。 好吧,我正确地做了比较。 但是当北不小于东时会发生什么? 我不需要另一行代码询问是否(boardArray [x + 1] [y]

+0

如果你正在使用'if-else'语句来检查“north = east”将会落到'else'块。在你的问题中,你刚才说过你会继续比较北部和西部和南部但是你没有提到如果“north> = east” – Judger

+0

东西应该是'boardArray [currentX] [east]'而不是'boardArray [east] [currentY]',因为你使y轴向西,东 – Judger