Cod sursa(job #2354326)

Utilizator EricEric Vilcu Eric Data 25 februarie 2019 10:34:41
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define inf 999999999
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int n,m,c[20][20],np,mc=2*inf;
int L[1048576][20];
int main()
{
    f>>n>>m;
    np=1<<n;
    for(int i=0;i<=np;++i)for(int j=0;j<=n;++j)L[i][j]=inf;
    for(int i=0;i<=n;++i)for(int j=0;j<=n;++j)c[i][j]=inf;
    for(int i=1;i<=m;++i){int x,y,t;f>>x>>y>>t;c[x][y]=t;}
    L[1][0]=0;
    for(int i=1;i<np;++i)for(int j=1;j<n;++j)if((i&(1<<j))>0)for(int k=0;k<=n;++k)if(c[k][j]<inf&&(i&(1<<k))>0)
        {L[i][j]=min(L[i][j],L[i^(1<<j)][k]+c[k][j]);}//cout<<(i^(1<<j))<<"->"<<i<<' '<<k<<"->"<<j<<'+'<<c[k][j]<<' '<<L[i][j]<<'\n';}
    for(int i=1;i<=n;++i)if(c[i][0]<inf)mc=min(mc,L[np-1][i]+c[i][0]);
    if(mc<inf)g<<mc;
    else g<<"Nu exista solutie";
}