Cod sursa(job #2432655)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 24 iunie 2019 17:01:45
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("hamiltonian.in");
ofstream out("hamiltonian.out");

const int DIM = 18;
const int INF = 1e9;

int dp[(1 << DIM) + 7][DIM + 7];
int c[DIM + 7][DIM + 7];

vector <int> v[DIM + 7];

main()
{
    int n, m;
    in >> n >> m;

    for(int j = 0; j < n; j++)
    {
        for(int i = 0; i < (1 << n); i++)
            dp[i][j] = INF;

        for(int i = 0; i < n; i++)
            c[i][j] = INF;
    }

    while(m--)
    {
        int x, y, w;
        in >> x >> y >> w;

        v[y].push_back(x);
        c[x][y] = w;
    }

    dp[1][0] = 0;

    for(int i = 0; i < (1 << n); i++)
        for(int j = 0; j < n; j++)
            if(i & (1 << j))
                for(auto t : v[j])
                    if(i & (1 << t))
                        dp[i][j] = min(dp[i][j], dp[i ^ (1 << j)][t] + c[t][j]);

    int minCost = INF;

    for(auto i : v[0])
        minCost = min(minCost, dp[(1 << n) - 1][i] + c[i][0]);

    if(minCost == INF)
        out << "Nu exista solutie\n";
    else
        out << minCost;
}