在数组的相邻位置中查找最小值
Finding minimum value within adjacent locations of array
我是编码新手,已经两个多月没有编码了。
对于我的任务,我正在逃避迷宫算法。
用户定义了一个二维数组和一个起点,那么程序必须走破坏性最小的路线才能找到出路。 "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伤害”。
我的问题是比较North是否小于East,如果North小于East,是否小于West?还是南方?如果东小于北,它是否小于西?还是南方? & 等等等等。
我不确定我是否以正确的方式处理这个问题。
我的尝试可以在下面的 hastebin link 的第 44 - 78 行找到。
我不知道我在做什么。
我创建了一个 int minimumValue;
,但我不确定如何使用它或在哪里使用它。如果 boardArray[north][currentY] < boardArray[east][currentY]
那么 boardArray[north][currentY]
我的新最小值是否正确?然后我还需要编写代码将其与西部和南部进行比较。我觉得必须有一个更简单的方法来解决它。
我试过谷歌搜索解决方案、Reddit、The Coding Den discord 服务器,但我就是无法理解它。
我们将不胜感激!
我假设你说北指的是-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?
当然要先判断north和east是否都在数组里面,否则会得到ArrayIndexOutOfBoundException
神圣嵌套的其他蝙蝠侠!
我会将第 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 语句来完成。
我是编码新手,已经两个多月没有编码了。 对于我的任务,我正在逃避迷宫算法。 用户定义了一个二维数组和一个起点,那么程序必须走破坏性最小的路线才能找到出路。 "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伤害”。
我的问题是比较North是否小于East,如果North小于East,是否小于West?还是南方?如果东小于北,它是否小于西?还是南方? & 等等等等。 我不确定我是否以正确的方式处理这个问题。 我的尝试可以在下面的 hastebin link 的第 44 - 78 行找到。 我不知道我在做什么。
我创建了一个 int minimumValue;
,但我不确定如何使用它或在哪里使用它。如果 boardArray[north][currentY] < boardArray[east][currentY]
那么 boardArray[north][currentY]
我的新最小值是否正确?然后我还需要编写代码将其与西部和南部进行比较。我觉得必须有一个更简单的方法来解决它。
我试过谷歌搜索解决方案、Reddit、The Coding Den discord 服务器,但我就是无法理解它。
我们将不胜感激!
我假设你说北指的是-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?
当然要先判断north和east是否都在数组里面,否则会得到ArrayIndexOutOfBoundException
神圣嵌套的其他蝙蝠侠!
我会将第 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 语句来完成。