Java 在NxN矩阵中,什么算法可以找到两个节点之间的最短路径?
由于对算法不熟悉,并且已经在网络上搜索过了,包括关于stackoverflow的一些答案,我仍然在问自己如何在一个简单的矩阵中找到这些节点之间的距离 首先,简单矩阵:Java 在NxN矩阵中,什么算法可以找到两个节点之间的最短路径?,java,algorithm,matrix,Java,Algorithm,Matrix,由于对算法不熟悉,并且已经在网络上搜索过了,包括关于stackoverflow的一些答案,我仍然在问自己如何在一个简单的矩阵中找到这些节点之间的距离 首先,简单矩阵: public class MatrixRoutes { int[][] position; // matrix int size; MatrixRoutes(int dimentions) { posicion = new int[dimentions][dimentions]; size= dimens
public class MatrixRoutes {
int[][] position; // matrix
int size;
MatrixRoutes(int dimentions) {
posicion = new int[dimentions][dimentions];
size= dimensiones;
}
}
我用一个简单的
MatrixRoutes r = new MatrixRoutes(5);
酷!我有我的空格子
用最简单的数据填充它,距离:
r.position[0][1] = 1;
r.position[1][1] = 0;
r.position[0][2] = 2;
r.position[2][2] = 0;
r.position[0][3] = 3;
r.position[3][3] = 0;
r.position[0][4] = 4;
r.position[4][4] = 0;
r.position[0][5] = 5;
r.position[5][5] = 0;
这是我的测试距离矩阵,可以测试了
好的,我的节点有距离。现在的问题是找到最短的距离。我一直在阅读不同的算法及其Java实现
我想实现Dijkstra的算法,但它似乎只接受一个起始数字,用作距离变量?当我需要两个变量之间的距离时,这不是我需要的
下面是我实现算法的尝试:
private static int buscarRutaMasRapida(MatrixRoutes g, int nodeOrigin, int nodeDestiny)
{
int[] found = new int[g.position.length];
boolean[] visitedNode = new boolean[g.position.length];
int max = 999;
for (int i = 0; i < g.position.length; i++)
{
mejor[i] = max;
visitedNode [i] = false;
}
found[nodeOrigin+ nodeDestiny] = nodeOrigin + nodeDestiny;
for(int i = 0; i < g.position.length; i++)
{
int min = max;
int nodoNow = nodeOrigin;
for (int j = 0; j < g.position.length; j++)
{
if (!visitedNode [j] && found [j] < min)
{
nodoNow = j;
min = found [j];
}
}
visitedNode [nodoNow ] = true;
for (int j = 0; j < g.position.length; j++)
{
if (g.position[nodoNow ][j] < max && found[nodoNow ] + g.position[nodoNow ][j] < found [j])
{
found[j] = found [nodoNow ] + g.position[nodoNow ][j];
}
}
}
return found [g.position.length - 2];
}
private static int-buscarRutaMasRapida(矩阵路由g、int-nodeOrigin、int-nodeDestiny)
{
int[]found=新的int[g.position.length];
布尔值[]visitedNode=新布尔值[g.position.length];
int max=999;
对于(int i=0;i
我要问的是,有人知道一种算法,可以在普通邻接矩阵或距离矩阵中找到两个节点之间的最短距离。Dijkstra是(我)首选的路线。它接收一个节点并查找到所有其他节点的最短路径。通常,对于两个节点之间的距离,人们会在Dijkstra内创建一个检查,以在到达所需的“结束”节点时返回
事实上,有非常好的psuedocode供您使用
例如,在Dijkstra的第一步中,您需要找到从原点s到其他节点的距离,您可以查看从s到其他节点的所有距离,并将其放入优先级队列中:
queue.add(position[S][x]); //Do this for all x adjacent to S
如果需要存储每个点之间的距离,那么如果邻接图是稠密的,则重复使用Dijstraka算法是低效的 相反,你想要的是
在维基百科页面上,Dijstraka的运行时间为
O(ve log V)
,而Floyd War的运行时间为O(V^3)
。在连接图中,E
介于V
(单独连接)和V^2
(每个节点连接到每个其他节点),因此最佳效果实际上取决于您的数据。我想我的问题是在图中查找两个节点之间的距离。我假设它是原点+距离,但如果我把对角线考虑进去,听起来不太对。啊。。。换句话说,如果它是一个NxN矩阵,那么g.position的长度应该足够了?它是NxN,用[n][n]个位置初始化。你不需要使用g.position的长度。您应该只使用其中存储的值。最终,您的答案距离将存储在g.position[nodeOrigin][nodeDestiny]中。