Cod sursa(job #3355247)

Utilizator alexanca_Alexandru anca alexanca_ Data 22 mai 2026 11:08:12
Problema Generare de permutari Scor 80
Compilator java Status done
Runda Arhiva educationala Marime 4.65 kb
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
//import java.util.*;
//
//public class Permutari {
//    static int[] sol;
//    static boolean[] vizitat;
//    static int n ;
//    public static void main(String args[] ) throws Exception {
//        /* Enter your code here. Read input from STDIN. Print output to STDOUT */
//        MyScanner s = new MyScanner();
//        n = s.nextInt();
//
//        sol = new int[n+1];
//        vizitat = new boolean[n+1];
//        if (n ==1 ) {
//            System.out.println(1);
//        } else {
//            if (n == 0) {
//                System.out.println(-1);
//            } else {
//                back(1);
//            }
//
//        }
//
//
//    }
//    static void back(int pas) {
//        if (pas > n) {
//            for (int j = 1; j <= n; j++) {
//                System.out.print(sol[j] + " ");
//            }
//            System.out.println();
//            return;
//        }
//
//        for (int i = 1; i<=n; i++) {
//            if (!vizitat[i]) {
//                if (pas == 1 || sol[pas - 1] != i) {
//                    vizitat[i] = true;
//                    sol[pas] = i;
//                    back(pas + 1);
//                    vizitat[i] = false;
//                }
//            }
//
//        }
//    }
//}
//
//class MyScanner {
//    BufferedReader br;
//    StringTokenizer st;
//
//    public MyScanner() {
//        br = new BufferedReader(new InputStreamReader(System.in));
//    }
//
//    String next() {
//        while (st == null || !st.hasMoreElements()) {
//            try {
//                st = new StringTokenizer(br.readLine());
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return st.nextToken();
//    }
//
//    int nextInt() {
//        return Integer.parseInt(next());
//    }
//
//    long nextLong() {
//        return Long.parseLong(next());
//    }
//
//    double nextDouble() {
//        return Double.parseDouble(next());
//    }
//
//    String nextLine(){
//        String str = "";
//        try {
//            str = br.readLine();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return str;
//    }
//}

import java.io.*;
import java.util.*;

public class Main {
    static int[] sol;
    static boolean[] vizitat;
    static int n;

    // Declarăm PrintWriter global pentru a-l putea accesa din funcția back
    static PrintWriter out;

    public static void main(String args[]) throws Exception {
        // Inițializăm citirea din și scrierea în fișiere
        MyScanner s = new MyScanner("permutari.in");
        out = new PrintWriter(new BufferedWriter(new FileWriter("permutari.out")));

        n = s.nextInt();

        sol = new int[n + 1];
        vizitat = new boolean[n + 1];

        // Pornim backtracking-ul
        back(1);

        // FOARTE IMPORTANT: Trebuie să închidem fișierul la final pentru a salva datele scrise!
        out.close();
    }

    static void back(int pas) {
        // Condiția de oprire: am completat N numere
        if (pas > n) {
            for (int j = 1; j <= n; j++) {
                out.print(sol[j] + " "); // Scriem în fișier în loc de consolă
            }
            out.println();
            return;
        }

        // Generăm permutările
        for (int i = 1; i <= n; i++) {
            if (!vizitat[i]) { // Singura condiție necesară pentru permutări simple
                vizitat[i] = true;
                sol[pas] = i;

                back(pas + 1);

                vizitat[i] = false;
            }
        }
    }
}

// Clasa MyScanner adaptată pentru a citi din fișier în loc de System.in
class MyScanner {
    BufferedReader br;
    StringTokenizer st;

    public MyScanner(String fileName) throws FileNotFoundException {
        br = new BufferedReader(new FileReader(fileName));
    }

    String next() {
        while (st == null || !st.hasMoreElements()) {
            try {
                String line = br.readLine();
                if (line == null) return null;
                st = new StringTokenizer(line);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }

    double nextDouble() {
        return Double.parseDouble(next());
    }

    String nextLine() {
        String str = "";
        try {
            str = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}