Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <unordered_set>
  5.  
  6. using namespace std;
  7.  
  8. class Task {
  9. public:
  10. void solve() {
  11. read_input();
  12. print_output(get_result());
  13. }
  14.  
  15. private:
  16. int n, k;
  17.  
  18. void read_input() {
  19. ifstream fin("in");
  20. fin >> n >> k;
  21. fin.close();
  22. }
  23.  
  24. vector<vector<int> > get_result() {
  25. vector<vector<int> > all;
  26. vector<int> solution(k);
  27. vector<int> domain(n + 1);
  28. unordered_set<int> visited;
  29.  
  30. for (int i = 0; i <= n; i++) {
  31. domain[i] = i;
  32. }
  33.  
  34. back(0, k, all, solution, domain, visited);
  35.  
  36. return all;
  37. }
  38.  
  39. void back(int step, int stop, vector<vector <int> >& all, vector<int>& sol,
  40. vector<int>& domain, unordered_set<int>& visited) {
  41.  
  42. if (step == stop) {
  43. all.emplace_back(sol);
  44. return;
  45. }
  46.  
  47. for (int i = 1; i <= n; i++) {
  48. if (visited.find(domain[i]) == visited.end()) {
  49. sol[step] = domain[i];
  50. visited.insert(domain[i]);
  51.  
  52. back(step + 1, stop, all, sol, domain, visited);
  53.  
  54. visited.erase(domain[i]);
  55. }
  56. }
  57. }
  58.  
  59. void print_output(vector<vector<int> > result) {
  60. ofstream fout("out");
  61. fout << result.size() << '\n';
  62. for (int i = 0; i < (int)result.size(); i++) {
  63. for (int j = 0; j < (int)result[i].size(); j++) {
  64. fout << result[i][j] <<
  65. (j + 1 != result[i].size() ? ' ' : '\n');
  66. }
  67. }
  68. fout.close();
  69. }
  70. };
  71.  
  72. int main() {
  73. Task task;
  74. task.solve();
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement