fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <windows.h>
  4. #include "matrix.h"
  5.  
  6. using namespace std;
  7.  
  8. typedef vector<int> Function;
  9. typedef vector<vector<int>> FunctionFull;
  10.  
  11. FunctionFull Assignation(int ** data, int N, int M, Function Choice, Function BusyPos, FunctionFull Opt, int j) {
  12.  
  13. for (int i = 0; i < M; i++) {
  14. if(BusyPos[i] == 0) {
  15. BusyPos[i] = 1;
  16. Choice[j] = i;
  17. Choice[N] += data[Choice[j]][j];
  18. if (j < N-1) Opt = Assignation(data, N, M, Choice, BusyPos, Opt, j+1);
  19. if(Choice[N] >= Opt[0][N]) {
  20. if(Choice[N] > Opt[0][N]) Opt.clear();
  21. Opt.push_back(Choice);
  22. Choice[N] -= data[Choice[j]][j];
  23. }
  24. else {
  25. BusyPos[i] = 0;
  26. Choice[N] -= data[Choice[j]][j];
  27. }
  28. }
  29. }
  30.  
  31. return Opt;
  32. }
  33.  
  34. FunctionFull Assignation(int ** data, int N, int M) {
  35. return Assignation(data, N, M, Function(N+1, 0), Function(N+1, 0), FunctionFull(1,Function(N+1, 0)), 0);
  36. }
  37. FunctionFull Assignation1(int ** data, int N, int M, Function Choice, Function BusyPos, FunctionFull Opt, int j) {
  38.  
  39. for (int i = 0; i < N; i++) {
  40. if(BusyPos[i] == 0) {
  41. BusyPos[i] = 1;
  42. Choice[j] = i;
  43. Choice[N] += data[Choice[j]][j];
  44. if (j < N-1) Opt = Assignation(data, N, M, Choice, BusyPos, Opt, j+1);
  45. if(Choice[N] >= Opt[0][N]) {
  46. if(Choice[N] > Opt[0][N]) Opt.clear();
  47. Opt.push_back(Choice);
  48. Choice[N] -= data[Choice[j]][j];
  49. }
  50. else {
  51. BusyPos[i] = 0;
  52. Choice[N] -= data[Choice[j]][j];
  53. }
  54. }
  55. }
  56.  
  57. return Opt;
  58. }
  59.  
  60. FunctionFull Assignation1(int ** data, int N, int M) {
  61. return Assignation1(data, N, M, Function(N+1, 0), Function(N+1, 0), FunctionFull(1,Function(N+1, 0)), 0);
  62. }
  63.  
  64.  
  65. void Result(FunctionFull Optimal){
  66. for (auto v : Optimal) {
  67. for(int i : v) cout << i << ' ';
  68. cout << endl;
  69. }
  70. }
  71.  
  72. int main() {
  73.  
  74. SetConsoleCP (1251);
  75. SetConsoleOutputCP (1251);
  76.  
  77. int N, M;
  78. cout << "Введите размер матрицы MxN (Сотрудников х Должностей): ";
  79. cin >> N >> M;
  80.  
  81. if(M <= 1 && N <= 1){
  82. cerr << "Сотрудников / Дожностей должно быть больше одного!";
  83. return -2;
  84. }
  85.  
  86. int size = N * M;
  87.  
  88. int ** data = new int * [size];
  89. for (int j = 0; j < size; j++) {
  90. data [j] = new int [size];
  91. }
  92.  
  93. int Option;
  94. cout << "Сгенерировать матрицу (0) или вводить самостоятельно (...)?" << endl;
  95. cin >> Option;
  96. system("cls");
  97.  
  98. if(Option){
  99. cout << "Введите данные о " << size << " сотрудниках: " << endl;
  100. Input(data, N, M, Option);
  101. system("cls");
  102. cout << "Введенная матрица (" << M << "x" << N << "):" << endl;
  103. OutPut(data, N, M);
  104. }else{
  105. Input(data, N, M, Option);
  106. cout << "Сгенерированная матрица(" << M << "x" << N << "):" << endl;
  107. OutPut(data, N, M);
  108. }
  109.  
  110. if (N <= M){
  111. FunctionFull Optimal = Assignation(data, N, M);
  112. cout << endl;
  113. cout << "Результат выбора сотрудников (Номер i сотрудника на должности j): " << endl;
  114. Result(Optimal);
  115. } else{
  116. int ** copy = new int * [size];
  117. for (int j = 0; j < size; j++) {
  118. copy [j] = new int [size];
  119. }
  120. Transpose(copy, data, N, M);
  121. FunctionFull Optimal = Assignation1(copy, N, M);
  122. cout << "Результат выбора сотрудников (Номер j сотрудника на должности i): " << endl;
  123. Result(Optimal);
  124. }
  125. return 0;
  126. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:3:21: fatal error: windows.h: No such file or directory
compilation terminated.
stdout
Standard output is empty