Перестановки для грубой силы - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь получить некоторые перестановки, которые позже я буду использовать для грубой силы матрицы смежности. Код ниже может быть неэффективным, но он работает. Я хочу добавить все выведенные перестановки в массив. Я изо всех сил пытаюсь сделать это. Кто-нибудь может помочь?

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 голосов
/ 30 октября 2018

Вы можете попробовать это.

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;
  } 
}
0 голосов
/ 30 октября 2018

Просто вместо печати храните их в списке. Здесь я использовал 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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...