蛮力的排列

时间:2018-10-30 15:26:27

标签: java permutation brute-force

我正在尝试获取一些置换,以后将用它们来蛮力邻接矩阵。下面的代码可能无效,但是可以工作。我想将所有输出的排列添加到数组中。我正在努力做到这一点。有人可以帮忙吗?

import java.util.*;

class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    System.out.println("Enter num: ");
    int num = in.nextInt();

    String str = "";
    for (int i=0; i < num; i++){
      String temp = Integer.toString(i); 
      str += temp;
    }

    int n = str.length(); 
    Permutation permutation = new Permutation(); 
    permutation.permute(str, 0, n-1);

  }
}


class Permutation { 
  public void permute(String str, int l, int r){ 
    if (l == r) {
      System.out.println(str);
    }
    else{ 
      for (int i = l; i <= r; i++){ 
        str = swap(str,l,i); 
        permute(str, l+1, r); 
        str = swap(str,l,i); 
      } 
    }

  } 

  public String swap(String a, int i, int j) { 
    char temp; 
        char[] charArray = a.toCharArray(); 
        temp = charArray[i] ; 
        charArray[i] = charArray[j]; 
        charArray[j] = temp; 
        String perm = String.valueOf(charArray);
    return perm;
  } 
}

2 个答案:

答案 0 :(得分:0)

只是将它们存储在列表中,而不是打印它们。在这里,我使用了LinkedList

class Permutation { 

    static LinkedList<String> output= new LinkedList<>(); //<---for storing result 

  public void permute(String str, int l, int r){ 
    if (l == r) {
    //   System.out.println(str);

        output.addLast(str); //<----store it in the linkedlist
    }
    else{ 
      for (int i = l; i <= r; i++){ 
        str = swap(str,l,i); 
        permute(str, l+1, r); 
        str = swap(str,l,i); 
      } 
    }

  } 

之后,您可以从Main打印结果。

class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    .....

    code
    ....

    permutation.permute(str, 0, n-1);
    System.out.println(Permutation.output); //<----print the result
  }
}

答案 1 :(得分:0)

您可以尝试一下。

import java.util.*;

class Main {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    System.out.println("Enter num: ");
    int num = in.nextInt();

    String str = "";
    for (int i=0; i < num; i++){
      String temp = Integer.toString(i); 
      str += temp;
    }

    int n = str.length(); 
    Permutation permutation = new Permutation(); 
    List<String> permutations = permutation.allPermutations(str, 0, n-1);
  }
}


class Permutation {
  List<String> permutations;

  public List<String> allPermutations(String str, int l, int r){ 
    permutations = new ArrayList<String();
    permute(str, l, r);

    return permutations;
  }

  public void permute(String str, int l, int r){ 
    if (l == r) {
      // System.out.println(str);
      permutations.add(str);
    }
    else{ 
      for (int i = l; i <= r; i++){ 
        str = swap(str,l,i); 
        permute(str, l+1, r); 
        str = swap(str,l,i); 
      } 
    }

  } 

  public String swap(String a, int i, int j) { 
    char temp; 
        char[] charArray = a.toCharArray(); 
        temp = charArray[i] ; 
        charArray[i] = charArray[j]; 
        charArray[j] = temp; 
        String perm = String.valueOf(charArray);
    return perm;
  } 
}