Alex_tz307

TSP - Ciclu Hamiltonian de Cost Minim

Nov 5th, 2020 (edited)
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("hamilton.in");
  7. ofstream fout("hamilton.out");
  8.  
  9. inline void min_self(int& a, int b) {
  10.     a = min(a, b);
  11. }
  12.  
  13. int main() {
  14.     int N, M;
  15.     fin >> N >> M;
  16.     vector < vector < int > > cost(N, vector < int >(N, INF)), G(N), dp(1 << N, vector < int >(N, INF));
  17.     while(M--) {
  18.         int u, v;
  19.         fin >> u >> v;
  20.         fin >> cost[u][v];
  21.         G[v].emplace_back(u);
  22.     }
  23.     dp[1][0] = 0;
  24.     for(int mask = 1; mask < (1 << N); ++mask)
  25.         for(int node = 0; node < N; ++node)
  26.             if(mask & (1 << node))
  27.                 for(int vec : G[node])
  28.                     if(mask & (1 << vec))
  29.                         min_self(dp[mask][node], dp[mask ^ (1 << node)][vec] + cost[vec][node]);
  30.     int ans = INF;
  31.     for(int node : G[0])
  32.         min_self(ans, dp[(1 << N) - 1][node] + cost[node][0]);
  33.     if(ans == INF)
  34.         fout <<"Nu exista solutie";
  35.     else
  36.         fout << ans;
  37. }
  38.  
Advertisement
Add Comment
Please, Sign In to add comment