创建对称矩阵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