【发布时间】:2018-03-11 05:47:19
【问题描述】:
我目前正在处理一个旅行推销员问题,我无法生成具有相同开始值和结束值的随机路径
这是我当前的路径(访问过的城市路径)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 38 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 14 39 40 454 42 43 46 47 48 49 50 51 0
查看最后一个节点如何返回 0(TSP 逻辑)
现在我正在尝试随机打乱这个数组,因为随机起点比其他人产生更好的结果但是我知道如何使用 Collections 打乱数组,但这会随机打乱每个值
基本上我正在尝试创建一种方法来随机打乱数组,但开始和结束值必须相同,每个数字必须是不同的 0-51
这是我当前的代码,它基本上是打乱数组并将最后一个索引设置为第一个索引
static void shuffleArray(int[] ar)
{
// If running on Java 6 or older, use `new Random()` on RHS here
Random rnd = new Random();
for (int i = ar.length - 1; i > 0; i--)
{
int index = rnd.nextInt(i + 1);
// Simple swap
int a = ar[index];
ar[index] = ar[i];
ar[i] = a;
}
ar[ar.length-1]=ar[0];
}
但是由于某种原因,这给了我重复的值
【问题讨论】:
-
idownvotedbecau.se/nocode --- 显示您拥有的代码,即 您 如何使用
Collections随机播放。然后我们将向您展示subList()的工作原理。或者您可以阅读我链接到的 javadoc。 -
@Andreas doneee
-
不,基本上andreas,我想生成一个随机路径,一个起点和终点相同的路径,如果我想SHUFFLE THE ARRAY我也想改变开始路径,因为一些起点有更好的结果,但是我想保持它们没有重复并且起点和终点相同的一致性。示例 0 2 4 6 8 5 0 -> 1 2 4 6 8 5 0 1
-
@Andreas .......
-
你得到一个重复的值,因为你有一个重复的值开始,即第一个和最后一个位置的值。随机播放数组,排除最后一个索引,即从
ar.length - 2开始循环,你很好。
标签: java arrays random graph shuffle