创建对称矩阵javavrp
事实上,我在一个车辆路径问题项目中工作,我正在尝试生成一个问题实例。创建对称矩阵javavrp,java,arrays,matrix,Java,Arrays,Matrix,事实上,我在一个车辆路径问题项目中工作,我正在尝试生成一个问题实例。 这里是一个示例,其中我们有一个站点“0”和三个站点“1”、“2”和“3” 我创建了下表: distdata= new int[stations][(stations+1)]; // where stations is equal to number of stations 我随机填充了矩阵,并将具有相同行和列索引的单元格设置为零,以便同一站点与自身之间的距离等于零 System.out.println("Matrix of
这里是一个示例,其中我们有一个站点“0”和三个站点“1”、“2”和“3”
我创建了下表:
distdata= new int[stations][(stations+1)]; // where stations is equal to number of stations
我随机填充了矩阵,并将具有相同行和列索引的单元格设置为零,以便同一站点与自身之间的距离等于零
System.out.println("Matrix of stations's distances : \n");
try {
BufferedWriter out2 = new BufferedWriter(new FileWriter("StationsDist.bench"));
for (int i = 0; i < stations + 1; i++) {
System.out.println("\t[" + i + "]");
}
System.out.println("\n");
for (int i = 0; i < stations; i++) {
System.out.println("\n[" + (i + 1) + "]");
for (int j = 0; j < stations + 1; j++) {
if ((i + 1) == j) {
dij = 0;
} else {
dij = (int) (Math.random() * 20) + 1;
}
System.out.println("\t[" + dij + "]");
out2.write(dij + "\t");
distdata[i][j] = dij;
distdatac[i][j] = dij;
}
out2.write("\n");
System.out.println("\n");
}
out2.close();
} catch (IOException e) {
}
问题是距离distdata[1][2]
应该等于距离distdata[2][1]
,因为它们表示相同的站点。我需要创建对称矩阵或将表更改为以下内容:
[0] [1] [2] [3]
[1] [3] [0] [7] [4]
[2] [1] [7] [0] [6]
[3] [2] [4] [6] [0]
有人能帮我吗?看看我是如何实现对称和非对称传输成本矩阵的()。这可能会对你有所帮助。你在自己跌倒的地方挖了个坑。您的矩阵是
distdata[stations][stations+1]
,并且distdata[i,0]
给出了从第i[th]个站(其名称为i+1)到车辆段(其名称为0)的距离。例如,站点“1”和“2”之间的距离是`distdata[0][2],站点“2”和“1”之间的距离是。。。distdata[1][1]
因此必须为空的距离不是distdata[i][i]
,而是distdata[i][i+1]
,符号表示distdata[i][j+1]==distdata[j][i+1]
我觉得这很容易出错
一点改进:在您的内部循环中,只要从0循环到i+1就足够了
写:
对于j=0,以及
distdata[i][j] = d;
distdata[j-1][i+1] = d
对于j>0
但我强烈建议您接受先失去原始数据,然后构建一个平方矩阵,这样
distdata[I][I]=0
和distdata[I][j]==distdata[j][I]
您真的在问如何创建一个对称矩阵吗?
distdata[i][j] = d
distdata[i][j] = d;
distdata[j-1][i+1] = d