Java 查找ArrayList的所有置换<;点>;并将它们放入新的ArrayList<;ArrayList<;点>&燃气轮机;

Java 查找ArrayList的所有置换<;点>;并将它们放入新的ArrayList<;ArrayList<;点>&燃气轮机;,java,arraylist,permutation,Java,Arraylist,Permutation,我在编写返回所有ArrayList排列的方法代码时遇到一些问题 我发现这个算法: public class MainClass { public static void main(String args[]) { permuteString("", "String"); } public static void permuteString(String beginningString, String endingString) { if (endingString.

我在编写返回所有ArrayList排列的方法代码时遇到一些问题

我发现这个算法:

public class MainClass {
  public static void main(String args[]) {
    permuteString("", "String");
  }

  public static void permuteString(String beginningString, String endingString) {
    if (endingString.length() <= 1)
      System.out.println(beginningString + endingString);
    else
      for (int i = 0; i < endingString.length(); i++) {
          String newString = endingString.substring(0, i) + endingString.substring(i + 1);
          permuteString(beginningString + endingString.charAt(i), newString);

      }
  }
}
我真的不明白。。。我正在尝试修复这个大约4个小时,我仍然得到其他问题

顺便说一下,我需要这个生成器来做一个解决旅行商问题的强力方法


提前谢谢。

可能是你的错误:

 ArrayList<Point> temp = new ArrayList<Point>();
 temp = soFar;
ArrayList temp=new ArrayList();
温度=soFar;

如果希望
temp
成为副本(新列表),则应将这两行替换为
ArrayList temp=new ArrayList(soFar)

您要查找的内容被称为。这种解决问题的技术主要基于递归。基本上,你设置第一个点,然后只考虑其他点作为子问题,并且当每个排列都找到了第一个点,它是递增的,等等。 您的解决方案如下所示。为了简单起见,我使用了一个整数数组,但是您应该能够轻松地将整数更改为点。将这些整数视为Arraylist中点的索引

public class PermutationDemo {

    public static void main(String[] args) {
        int[] array = new int[4];

        for (int i=0; i<array.length; i++) {
            reset(array, i);
        }

        solve(array, 0);
    }

    private static void solve(int[] array, int i) {
        if (i == array.length) {
            print(array);
            return;
        }

        for (int k=0; k<4; k++) {
            solve(array, i+1);
            makeMove(array, i);
        }

        reset(array, i);
    }

    private static void makeMove(int[] array, int i) {
        array[i] += 1;
    }

    private static void reset(int[] array, int i) {
        array[i] = 1;
    }

    private static void print(int[] array) {
        for (int i=0; i<array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println("");
    }
}

如果您准备使用外部库,Guava有
Collections2.permutations()
不幸的是,我真的不知道如何使用这个库。。。我用java编程已经有一两个月了,所以我的技能不太好……我试着替换这段代码,还替换了
ArrayList start=new ArrayList();开始=结束并给出了一些结果,但是。。。现在我明白了:

x=4.0y=3.0 | x=2.0y=4.0 | x=2.0y=2.0 |

x=4.0y=3.0 | x=2.0y=4.0 |

x=2.0y=2.0 | x=4.0y=3.0
很抱歉,我需要知道如何使用我的新格式。。。无论如何,这是一些进步,但我仍然不知道我可以更改什么…我在午夜查看了它,老实说,我在第一个潜在的错误时停止了,没有检查代码的其余部分,因此可能无法修复所有问题:)
 ArrayList<Point> temp = new ArrayList<Point>();
 temp = soFar;
public class PermutationDemo {

    public static void main(String[] args) {
        int[] array = new int[4];

        for (int i=0; i<array.length; i++) {
            reset(array, i);
        }

        solve(array, 0);
    }

    private static void solve(int[] array, int i) {
        if (i == array.length) {
            print(array);
            return;
        }

        for (int k=0; k<4; k++) {
            solve(array, i+1);
            makeMove(array, i);
        }

        reset(array, i);
    }

    private static void makeMove(int[] array, int i) {
        array[i] += 1;
    }

    private static void reset(int[] array, int i) {
        array[i] = 1;
    }

    private static void print(int[] array) {
        for (int i=0; i<array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println("");
    }
}
PS [10:21] Desktop > java PermutationDemo
1 1 1
1 1 2
1 1 3
1 1 4
1 2 1
1 2 2
1 2 3
1 2 4
1 3 1
1 3 2
1 3 3
1 3 4
1 4 1
1 4 2
1 4 3
1 4 4
2 1 1
2 1 2
2 1 3
2 1 4
2 2 1
2 2 2
2 2 3
2 2 4
2 3 1
2 3 2
2 3 3
2 3 4
2 4 1
2 4 2
2 4 3
2 4 4
3 1 1
3 1 2
3 1 3
3 1 4
3 2 1
3 2 2
3 2 3
3 2 4
3 3 1
3 3 2
3 3 3
3 3 4
3 4 1
3 4 2
3 4 3
3 4 4
4 1 1
4 1 2
4 1 3
4 1 4
4 2 1
4 2 2
4 2 3
4 2 4
4 3 1
4 3 2
4 3 3
4 3 4
4 4 1
4 4 2
4 4 3
4 4 4