Java中的图形 - 如何将矩阵附加到边缘?

时间:2014-05-25 00:57:30

标签: java matrix graph

我的图表通过邻接矩阵表示,我想构建一个方法,可以将矩阵[M x N]添加到选定的边缘。我的代码中缺少什么或错了什么?请注意,图表是非循环的。

public class Graph {

 /** Class Graph attributes */

    int [][] grafoo;    

/** Constructor */ 

public Graph (int dim)
{
    grafoo = new int [dim][dim];

    int i=0, j;     
    while(i<dim)
    {
        j=0;
        while(j<dim)
        {
            grafoo[i][j]=0;
            j++;
        }
        i++;
    }
}


/** Method add_edge */   //receives two nodes and places to the graph an edge from one node to another with a matrix MxN (for example M=4 and N=5).


void add_edge(int i, int j) // my problem is at this part, representing an edge through a matrix instead of the number 1(usual to say there is a edge in a matrix of adjacency)
{
            int[][] E = new int[M][N];      
            grafoo[i][j]= E;        
}

1 个答案:

答案 0 :(得分:0)

边缘的矩阵无法保存在2维grafoo字段中(至少不是以理智的方式)。需要一个二维矩阵数组,即int[][][][],因为根据注释,似乎可以从矩阵中获得边的权重。

如果无法从矩阵中获得权重,那么应该有一个具有两个字段的类:

class Edge {
    int[][] matrix;
    int weight;
    // TODO: non-default-costructor(s)? ...
    // TODO: change visibities / add final modifier if appropriate
}

然后应将grafoo的类型更改为Edge[][]


还有一件事:新创建的数组会自动初始化为初始值(请参阅jls-4.12.5),即0 intnull }对于引用类型,...

因此,应该删除while循环或者至少将其置于注释中,如果这有助于理解,会发生什么。

new int[dim][dim][][]会创建一个仅包含null值的二维数组(等待填充int[][] s)

同样Integer.MIN_VALUE 可能更好地表示不存在的边缘而不是0(假设while循环用于将所有边缘初始化为不存在)