Java 搜索二维数组
因此,我正在编写一个java程序,它应该能找到从入口Java 搜索二维数组,java,algorithm,graph,Java,Algorithm,Graph,因此,我正在编写一个java程序,它应该能找到从入口“2”到其中一个数字“3”的最短路径。它只能在位置上行走“1”是墙 11111121 131 1 1 1 1111 1 1 13 1 1 1 11 1 1 1 1 1 1 11111111 我的出发点是在2d数组中找到入口。可以这样做: Point entrance = new Point(0,0); for (int i = 0; i < N; i++) { for (int
“2”
到其中一个数字“3”
的最短路径。它只能在位置上行走<代码>“1”
是墙
11111121
131 1
1 1 1111
1 1 13 1
1 1 11 1
1 1 1
1 1
11111111
我的出发点是在2d数组中找到入口。可以这样做:
Point entrance = new Point(0,0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++){
if(map[i][j] == 2){
entrance.x =i;
entrance.y =j;
}
}
点入口=新点(0,0);
对于(int i=0;i
我还可以找到两个“3”
,并将它们保存在点中。但是我不知道如何将车辙返回到最接近的“3”
。我像一个操纵杆一样考虑,在那里我保存你走的方向,比如(上、下、左、右)。
然后返回从入口到最接近点3的完整移动列表。
有什么建议或想法我可以如何实现这一点吗?您需要制作一个计数器,每当当前位置为“”(可行走)时,计数器都会递增 矩阵中的符号
”
=0
:
Point entrance = new Point(0,0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++){
if(map[i][j] == 2){
entrance.x =i;
entrance.y =j;
}
}
Point firstexit = new Point(0,0);
int steps = 0;
int i = entrance.x;
int j = entrance.y;
int lasti = 0;
int lastj = 0;
while(true){
if(map[i][j] == 3){
firstexit.x =i;
firstexit.y =j;
break ;
}
if(map[i][j] == 0){
steps++;
}
// TO-DO : check if position exists
if(map[i][j+1] == 0 && (lasti != i && lastj != j)){
lastj = j;
j++;
}else if(map[i][j-1] == 0 && (lasti != i && lastj != j)){
lastj = j;
j--;
}else if(map[i+1][j] == 0 && (lasti != i && lastj != j)){
lasti = i;
i++;
}else if(map[i-1][j] == 0 && (lasti != i && lastj != j)){
lasti = i;
i--;
}
}
点入口=新点(0,0);
对于(int i=0;i
这里所说的只是一个图的非管状表示。每个单元格都是图中的一个顶点,只有当且仅当两个相邻单元格都是自由的时,两个相邻单元格之间才有一条边
现在,以这种方式来看问题,像查找入口一样查找入口,然后使用a查找出口。我将尝试创建一个包含节点和边的图形。节点是迷宫中的连接点,边是连接点与入口或出口对象之间的路径。每个边对象都有一个“权重”。从中计算网络后对于双数组,您可以使用一些简单的算法来计算最短路径。请查看。提供了一个示例算法。您可以将其作为起点。我将研究该链接。在我尝试计算该链接时,我喜欢您的思维方式,但您不只是找到所有存在的位置吗“”aka.0.你应该只找到从入口到3的移动量。是的,你是对的,我在发布答案时才意识到这一点:),现在我正在考虑如何编辑它。我也在做同样的事情。如果你朝某个方向移动,我会尝试使用“步骤++;”。比如map[i-1][j]=左,map[i+1][j]=右,map[i][j-1]=向上和map[i][j+1]如果我得到了突破点,我会告诉你的。正是我所做的。我想是一样的。这不会奏效的。史蒂芬:s我很确定这必须更具体。我相信,要么从入口[x][y]坐标走,要么从出口[x][y]走。