Cod sursa(job #1842122)

Utilizator tavonSuleyman Magnificul tavon Data 6 ianuarie 2017 15:34:16
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("hamilton.in");
ofstream out("hamilton.out");

const int INF = 0x3f3f3f3f;

int a[18][18];
int d[18][(1<<18)];
int n,m;

int main(){
    in>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,c;
        in>>x>>y>>c;
        a[x][y]=c;
    }
    int ans = INF;
    for(int k=0;k<n;k++)
        for(int i=0;i<(1<<n);i++)
            d[k][i]=INF;
    d[0][1]=0;
    for(int i=0;i<(1<<n);i++){
        for(int e=0;e<n;e++) if(i&(1<<e)){
            for(int f=0;f<n;f++) if(f!=e && i&(1<<f) && a[f][e]!=0){
                d[e][i] = min(d[e][i], d[f][i^(1<<e)] + a[f][e] );
            }
        }
    }
    for(int i=0;i<n;i++) if(a[i][0])
        ans = min(ans, d[i][(1<<n)-1] + a[i][0] );
    if(ans == INF) out<<"Nu exista solutie\n";
    else out<<ans<<'\n';
    return 0;
}