0

我为 TSP 实现了 2 种算法,它使用一个包含路线、它们的成本等的类。目前它使用随机值这很好,尽管我现在需要比较算法以便让这个公平我需要做出输入相同(这在使用随机输入时显然不太可能发生!)我遇到的问题是我不知道如何将其从随机值更改为将预先确定的值插入到二维数组中,不仅如此,我也不知道如何计算这些价值的成本。


随机生成节点值:

Random rand = new Random();
            for (int i=0; i<nodes; i++) {
                for (int j=i; j<nodes; j++) {
                    if (i == j)
                        Matrix[i][j] = 0;
                    else {
                        Matrix[i][j] = rand.nextInt(max_distance);
                        Matrix[j][i] = Matrix[i][j];
                    }
                }
            }

我假设上面声明了一个说 [4][4] 的矩阵,然后是 int 矩阵 [][] =插入值

我对这门课的其他部分没有帮助,但我认为我需要确保这部分是正确的,然后再问!

提前非常感谢!

4

2 回答 2

2

你可以像这样初始化二维数组:

    double matrix[][] = { { v1, v2, ..., vn }, { x1, x2, ..., xn }, ..., { y1, y2, ..., yn } };

其中每个内部 {} 表示外部(第一个)索引,每个内部元素表示最内部(第二个)intex。

示例:要访问元素 x1,请执行以下操作:

    matrix[1][0];

这是您要求的答案,但我仍然认为对两种算法使用相同的随机值集会更好,Jon Taylor 展示了一个很好的方法。设置种子的代码如下所示:

    int seed = INTEGER_VALUE;
    Random rand = new Random(seed);

这样,您将永远获得相同的值集。

于 2013-01-14T16:27:00.037 回答
2

您可以为每个随机数生成器设置一个种子,从而保证对于您测试的每个实现,都会创建相同的伪随机数序列。

这将节省手动输入大量值的工作量。

编辑以显示种子方法:

Random r = new Random(56);

每次使用 56 的种子创建 r 时,它都会产生完全相同的随机数序列。如果没有种子,我相信种子默认为系统时间(给人一种真正随机数的错觉)。

于 2013-01-14T16:24:31.957 回答