我的图表通过邻接矩阵表示,我想构建一个方法,可以将矩阵[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;
}
答案 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
int
,null
}对于引用类型,...
因此,应该删除while循环或者至少将其置于注释中,如果这有助于理解,会发生什么。
new int[dim][dim][][]
会创建一个仅包含null
值的二维数组(等待填充int[][]
s)
同样Integer.MIN_VALUE
可能更好地表示不存在的边缘而不是0
(假设while循环用于将所有边缘初始化为不存在)