【问题标题】:Array Shuffle (With same Start and end Value)数组随机播放(具有相同的开始和结束值)
【发布时间】: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


【解决方案1】:

你能不能去掉开始和结束位置,打乱数组,然后重新添加开始和结束位置?

【讨论】:

  • 检查我的代码请问这是你的意思吗?我将如何删除开始和结束..?
  • 我想要不同的开始路径
  • 所以随机从你的数组中拉出一个项目,将剩余的项目洗牌,然后把开始/结束放回去。
猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 2012-11-05
  • 2021-12-20
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多