Cod sursa(job #2560439)

Utilizator Rares31100Popa Rares Rares31100 Data 27 februarie 2020 23:36:21
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define Inf 10000007

using namespace std;

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

int n,m;
vector <int> gf[18];
int dp[18][1<<18];
int cost[18][18];

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

    for(int i,j,ct,k=1;k<=m;k++)
    {
        in>>i>>j>>ct;

        cost[i][j]=ct;
        gf[j].push_back(i);
    }

    for(int i=0;i<(1<<n);i++)
        for(int nod=0;nod<n;nod++)
            dp[nod][i]=Inf;

    dp[0][1<<0]=0;

    for(int i=1;i<(1<<n);i++)
        for(int nod=0;nod<n;nod++)
            if(i&(1<<nod))
            {
                for(auto vec:gf[nod])
                    if(i&(1<<vec))
                        dp[nod][i]=min(dp[nod][i],dp[vec][i-(1<<nod)]+cost[vec][nod]);
            }

    int minim=Inf;

    for(auto vec:gf[0])
        minim=min(minim,dp[vec][(1<<n)-1]+cost[vec][0]);

    if(minim!=Inf)
        out<<minim;
    else
        out<<"Nu exista solutie";

    return 0;
}