Java 在NxN矩阵中,什么算法可以找到两个节点之间的最短路径?

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

由于对算法不熟悉,并且已经在网络上搜索过了,包括关于stackoverflow的一些答案,我仍然在问自己如何在一个简单的矩阵中找到这些节点之间的距离

首先,简单矩阵:

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]中。