Cod sursa(job #2203158)

Utilizator Alex.MocanuMocanu Alexandru Alex.Mocanu Data 11 mai 2018 11:09:04
Problema Generare de permutari Scor 60
Compilator java Status done
Runda Arhiva educationala Marime 2.15 kb


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

public class Main{
	static class Task{
		
		
		int n;
		
		public void read() {
			MyScanner sc = new MyScanner();
			 n = sc.nextInt();
		}
		
		private void writeOutput(ArrayList<ArrayList<Integer>> result) {
			try {
				PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("permutari.out")));
				for (ArrayList<Integer> arr  : result) {
					for(int number : arr) {
						pw.printf("%d ", number);
					}
					pw.printf("\n");
				}
				pw.close();
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
		}
		
		public ArrayList<ArrayList<Integer>> solution(){
			
			ArrayList<ArrayList<Integer>> sol = new ArrayList<>();
			boolean []viz = new boolean[n+1];
			LinkedList<Integer> part = new LinkedList<>();
			
			bkt(sol,part,viz);
			return sol;
		}
		public void bkt(ArrayList<ArrayList<Integer>> sol,LinkedList<Integer> partiala, boolean vizitat[]) {
			if(partiala.size() == n) {
				sol.add(new ArrayList<>(partiala));
			}
			
			for(int i = 1 ; i <= n ; i++ ) {
				if(vizitat[i] ==  false) {
					vizitat[i] =  true;
					partiala.add(i);
					bkt(sol,partiala,vizitat);
					int lungime = partiala.size();
					partiala.remove(lungime-1);
					vizitat[i] =  false;
				}
				
			}
		}
		
		public void solve() {
			read();
			writeOutput(solution());
		}
	}
	public static void main(String[] args) {
		new Task().solve();
	}
}

class MyScanner {
	BufferedReader br;
	StringTokenizer st;

	public MyScanner() {
		try {
			br = new BufferedReader(new InputStreamReader(new FileInputStream("permutari.in")));
		} catch (FileNotFoundException e) {
			// TODO: handle exception
		}

	}

	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;
	}
}