Java,如何计算邻居矩阵和XY坐标的欧氏距离

时间:2018-03-28 22:40:19

标签: java arrays

我正在尝试使用Dijkstra的算法来找到通过路线的最短路径。当前我在邻接矩阵2D阵列中有邻居。如果连接到其他节点则为1;如果未连接则为0,则为0。

public static void buildMatrix(String[] data)
{

    int[][] neighbours = new int[numberOfNodes][];

    for (int row= 0; row < noOfCaves; row++){
        neighbours[row] = new int[numberOfNodes];
    }

    int col = 0;
    int row = 0;

    for (int point = (numberOfNode*2)+1 ; point < data.length;      point++){            

        if (data[point].equals("1"))
            neighbours[row][col] = 1;
        else
            neighbours[row][col] = 0;

        row++;
        if (row == numberOfNodes){
            row=0;
            col++;
        }

    }
}

然后我将X,Y坐标保存到另一个2D数组中,如此

int Ref = 0;
int a = 0;

for (int i = 1; i < (numberOfNodes * 2) + 1; i++)
{
    coordinates[x][y] = Integer.parseInt(data[i]);

    if (y == 0) { y = 1; } 
    else { y = 0; x++; }
}

这给了我一个像XY坐标一样的2D数组 - 坐标[[5,7],[4,5],[13,6],[5,9],[10,4],[ 8,6],[14,1]]。

如何使用这两个数组计算欧氏距离,以便得到节点及其邻居的距离?

1 个答案:

答案 0 :(得分:0)

如果节点i连接到节点j,则应使用包含协调coords的矩阵计算欧几里德距离,如下所示:

Math.sqrt((coords[i][0] - coords[j][0]) * (coords[i][0] - coords[j][0]) + 
          (coords[i][1] - coords[j][1]) * (coords[i][1] - coords[j][1]))

这是两个维度的欧几里德距离公式。