Pagini recente » Cod sursa (job #1033857) | Cod sursa (job #2746703) | Cod sursa (job #99100) | Cod sursa (job #2699448) | Cod sursa (job #2230182)
import java.io.*;
import java.util.*;
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, new CustomConsumer<int[]>() {
@Override
public void accept(int[] solution) {
for (int i = 0; i < solution.length; i++) {
printWriter.print(solution[i] + " ");
}
printWriter.println();
}
});
}
}
static class Solver {
public static void solve(int N, CustomConsumer<int[]> permHandler) {
int[] partialPermutation = new int[N];
BitSet inPartialPerm = new BitSet(N + 1);
solve(N, 0, partialPermutation, inPartialPerm, permHandler);
}
private static void solve(int N, int currElems, int[] partialPerm, BitSet inPartialPerm, CustomConsumer<int[]> permHandler) {
if (currElems == N) {
permHandler.accept(partialPerm);
return;
}
for (int nextElem = 1; nextElem <= N; nextElem++) {
if (!inPartialPerm.get(nextElem)) {
inPartialPerm.set(nextElem);
partialPerm[currElems] = nextElem;
solve(N, currElems + 1, partialPerm, inPartialPerm, permHandler);
// roll back changes
inPartialPerm.clear(nextElem);
}
}
}
}
public interface CustomConsumer<T> {
void accept(T t);
}
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();
}
}
}