Java 数组洗牌(具有相同的起始值和结束值)

Java 数组洗牌(具有相同的起始值和结束值),java,arrays,random,graph,shuffle,Java,Arrays,Random,Graph,Shuffle,我目前正在研究一个旅行推销员问题,我很难生成具有相同起始值和结束值的随机路径 这是我当前的路径(访问城市的路径) 01 2 3 4 5 6 7 8 9 10 11 12 13 38 16 18 19 20 21 22 24 25 26 28 29 30 31 32 33 35 36 37 14 39 40 41 42 44 45 46 48 49 50 51 0 查看最后一个节点如何返回0(TSP逻辑) 现在我尝试随机洗牌这个数组,因为随机起始点比其他点产生更好的结果,但是我知道如何使用集合洗牌

我目前正在研究一个旅行推销员问题,我很难生成具有相同起始值和结束值的随机路径

这是我当前的路径(访问城市的路径)

01 2 3 4 5 6 7 8 9 10 11 12 13 38 16 18 19 20 21 22 24 25 26 28 29 30 31 32 33 35 36 37 14 39 40 41 42 44 45 46 48 49 50 51 0

查看最后一个节点如何返回0(TSP逻辑)

现在我尝试随机洗牌这个数组,因为随机起始点比其他点产生更好的结果,但是我知道如何使用集合洗牌数组,但这会随机洗牌每个值

基本上,我试图创建一个随机洗牌数组的方法,除了起始值和结束值必须相同,每个数字必须是不同的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];
 }

但是,由于某些原因,这会给我重复的值。

您是否可以删除起始位置和结束位置,洗牌数组,然后再次添加起始位置和结束位置?

您是否可以删除起始位置和结束位置,洗牌数组,然后再次添加起始位置和结束位置?

--显示您的代码,即如何使用
集合进行洗牌。然后我们将向您展示如何工作。或者你可以阅读我链接到的javadoc。@Andreas doneeeNo,基本上Andreas,我想生成一个随机路径,一个起点和终点相同的路径,如果我想洗牌数组,我还想更改起点路径,因为有些起点有更好的结果,但是,我希望保持一致性,即它们没有重复项,并且开始值和结束值相同。示例0 2 4 6 8 5 0->1 2 4 6 8 5 01@Andreas……您得到的是一个重复值,因为您有一个重复值开始,即第一个和最后一个位置的值。洗牌数组,不包括最后一个索引,即在
ar.length-2
处开始循环,就可以了显示您拥有的代码,即如何使用
集合进行洗牌。然后我们将向您展示如何工作。或者你可以阅读我链接到的javadoc。@Andreas doneeeNo,基本上Andreas,我想生成一个随机路径,一个起点和终点相同的路径,如果我想洗牌数组,我还想更改起点路径,因为有些起点有更好的结果,但是,我希望保持一致性,即它们没有重复项,并且开始值和结束值相同。示例0 2 4 6 8 5 0->1 2 4 6 8 5 01@Andreas……您得到的是一个重复值,因为您有一个重复值开始,即第一个和最后一个位置的值。洗牌数组,不包括最后一个索引,即在
ar.length-2
处开始循环,就可以了。请检查我的代码,这是你的意思吗?如何删除开始和结束…?我想要不同的开始路径,所以随机从数组中拉出一个项目,洗牌剩余的项目,然后放回开始/结束。请检查我的代码,这是你的意思吗?如何删除开始和结束..?我想要不同的开始路径,所以随机从数组中拉出一个项目,将剩余的项目洗牌,然后将开始/结束放回。