Pagini recente » Cod sursa (job #713136) | Cod sursa (job #169499) | Statistici Nagy Adam Balazs (balays17) | Cod sursa (job #1153714) | Cod sursa (job #2230179)
import java.io.*;
import java.util.*;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) throws IOException {
InputStream inputStream = new FileInputStream("permutari.in");
OutputStream outputStream = new FileOutputStream("permutari.out");
try (InputReader inputReader = new InputReader(inputStream);
PrintWriter printWriter = new PrintWriter(outputStream)) {
int N = inputReader.nextInt();
Solver.solve(N, printWriter);
}
}
static class Solver {
public static void solve(int N, PrintWriter printWriter) {
int[] partialPermutation = new int[N];
BitSet inPartialPerm = new BitSet(N + 1);
solve(N, 0, partialPermutation, inPartialPerm, printWriter);
}
private static void solve(int N, int currElems, int[] partialPerm, BitSet inPartialPerm, PrintWriter printWriter) {
if (currElems == N) {
for (int i = 0; i < N; i++) {
printWriter.print(partialPerm[i] + " ");
}
printWriter.println();
return;
}
for (int nextElem = 1; nextElem <= N; nextElem++) {
if (!inPartialPerm.get(nextElem)) {
inPartialPerm.set(nextElem);
partialPerm[currElems] = nextElem;
solve(N, currElems + 1, partialPerm, inPartialPerm, printWriter);
// roll back changes
inPartialPerm.clear(nextElem);
}
}
}
}
static class InputReader implements AutoCloseable {
private BufferedReader bufferedReader;
private StringTokenizer stringTokenizer;
public InputReader(InputStream inputStream) {
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
stringTokenizer = null;
}
public String nextToken() {
if (stringTokenizer == null || !stringTokenizer.hasMoreTokens()) {
try {
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return stringTokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(nextToken());
}
@Override
public void close() throws IOException {
bufferedReader.close();
}
}
}