Advertisement
AlexG2230954

Untitled

Mar 25th, 2022
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6. using graph = vector< vector<int> >;
  7.  
  8. const int INF = 10000;
  9.  
  10. // вывод на экран гамельтонова пути
  11. void print_way(const vector<int> & way) {
  12.     for(auto el : way)
  13.         cout << (el + 1) << ' ';
  14. }
  15.  
  16. // подсчет веса гамельтонова пути
  17. int count_weight(const graph & g, const vector<int> & way) {
  18.     int w = 0;
  19.  
  20.     for(int i = 1; i < way.size(); i++) {
  21.         int p = g[way[i - 1]][way[i]];
  22.         if(p == INF) return -1;
  23.         w += p;
  24.     }
  25.  
  26.     return w;
  27. }
  28.  
  29. // нахождение минимального веса гамильтонова пути
  30. int get_minimal_way(const graph & g, const vector<int> & dots) {
  31.     int min_weight = INF;
  32.  
  33.     do {
  34.         if(perm[0] != 0) continue;
  35.  
  36.         int w = count_weight(g, perm);
  37.         if(w == -1) continue;
  38.  
  39.         min_weight = min(min_weight, w);
  40.     } while(next_permutation(perm.begin(), perm.end()));
  41.  
  42.     return min_weight;
  43. }
  44.  
  45. int main() {
  46.     ios::sync_with_stdio(false);
  47.     cin.tie(0);
  48.  
  49.     int n;
  50.     graph g;
  51.     vector<int> perm;
  52.  
  53.     cin >> n;
  54.     g.resize(n, vector<int>(n));
  55.     perm.resize(n);
  56.  
  57.     // ввод матрицы смежности
  58.     for(int i = 0; i < n; i++)
  59.         for(int j = 0; j < n; j++)
  60.             cin >> g[i][j];
  61.  
  62.     // генерация точек в графе
  63.     for(int i = 0; i < n; i++)
  64.         perm[i] = i;
  65.  
  66.     cout << "Minimal way : " << get_minimal_way(g, perm) << endl;
  67.  
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement