Cod sursa(job #2510158)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 15 decembrie 2019 21:47:33
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <cstring>
#define inf 0x7F7F7F7F
using namespace std;

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

int n,m,i,j,k,c[18][18],d[18][1<<18],sol;

int main(){
    fin>>n>>m;
    for(;m;m--){
        fin>>i>>j;
        fin>>c[i][j];
    }

    memset(d,127,sizeof(d));
    d[0][1]=0;

    for(j=1;j<(1<<n);j+=2)
        for(i=0;i<n;i++)
            if(d[i][j]!=inf)
                for(k=1;k<n;k++)
                    if(c[i][k] && (j&(1<<k))==0)
                        d[k][j+(1<<k)]=min(d[k][j+(1<<k)],d[i][j]+c[i][k]);

    sol=inf;
    for(i=1;i<n;i++)
        if(c[i][0])
            sol=min(sol,d[i][(1<<n)-1]+c[i][0]);

    if(sol==inf)
        fout<<"Nu exista solutie";
    else
        fout<<sol;

    return 0;
}