Cod sursa(job #2203173)

Utilizator Alex.MocanuMocanu Alexandru Alex.Mocanu Data 11 mai 2018 11:43:21
Problema Combinari Scor 70
Compilator java Status done
Runda Arhiva educationala Marime 2.34 kb

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

public class Main {
	static class Task {

		int n, k;

		public void read() {
			MyScanner sc = new MyScanner();
			n = sc.nextInt();
			k = sc.nextInt();
		}

		private void writeOutput(ArrayList<ArrayList<Integer>> result) {
			try {
				PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("combinari.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, 1);
			return sol;
		}

		public void bkt(ArrayList<ArrayList<Integer>> sol, LinkedList<Integer> partiala, boolean vizitat[], int c) {
			if (partiala.size() == k) {
				sol.add(new ArrayList<>(partiala));
			}

			for (int i = 1; i <= n; i++) {
			
				if(partiala.size() != 0) {
					if(i < partiala.get(partiala.size()-1)) {
						continue;
					}
				}
				if ((n - i) >= (k - c)) {
					if (vizitat[i] == false) {
						vizitat[i] = true;
						partiala.add(i);
						c++;
						bkt(sol, partiala, vizitat, c);
						c--;
						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("combinari.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;
	}
}