Cod sursa(job #2171393)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 15 martie 2018 12:12:49
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int N,M,x,y,c,Cost[21][21],C[21][1<<21];
int main()
{
    freopen("hamilton.in","r",stdin);
    freopen("hamilton.out","w",stdout);
    scanf("%d%d",&N,&M);
    while(M--){
        scanf("%d%d%d",&x,&y,&c);
        Cost[x][y]=x;
    }
    memset(C,INF,sizeof(C));
    C[0][1]=1;
    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)],Cost[i][j]+C[i][k]);
    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)printf("Nu exista solutie");
    else printf("%d",sol);
    return 0;
}