我是编码的新手,并且编码时间超过两个月。 对于我的任务,我正在逃避迷宫算法。 用户定义了一个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不和服务器,但我根本无法解决这个问题。
任何和所有帮助将不胜感激!
答案 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语句完成。