Cod sursa(job #2082762)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 6 decembrie 2017 19:23:14
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<fstream>
#include<cstring>
#define INF 17000000
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int N,M,x,y,c,Cost[18][18],C[18][1<<18];
int main()
{
    f>>N>>M;
    while(M--){
        f>>x>>y>>c;
        Cost[x][y]=c;
    }
    memset(C,INF,sizeof(C));
    C[0][1]=0;
    for(int k=1;k<(1<<N);++k)
        for(int i=0;i<N;++i)
            if(k&(1<<i))
                for(int j=0;j<N;++j)
                    if(Cost[i][j]>0 && !(k&(1<<j)))
                        C[j][k|(1<<j)]=min(C[j][k|(1<<j)],C[i][k]+Cost[i][j]);
    int SOL=INF;
    for(int i=0;i<N;++i)
        if(Cost[i][0])
            SOL=min(SOL,C[i][(1<<N)-1]+Cost[i][0]);
    if(SOL>=INF)g<<"Nu exista solutie";
    else g<<SOL;
    return 0;
}