蛮力的排列
Permutations for 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;
}
}
只是不打印,而是将它们存储在列表中。这里我使用了 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
}
}
你可以试试这个。
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;
}
}
我正在尝试获得一些排列,稍后我将使用这些排列来暴力破解邻接矩阵。下面的代码可能效率不高,但它可以工作。我想将所有输出的排列添加到一个数组中。我正在努力做到这一点。谁能帮忙?
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;
}
}
只是不打印,而是将它们存储在列表中。这里我使用了 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
}
}
你可以试试这个。
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;
}
}