Cod sursa(job #2616461)

Utilizator TzigCurta Tudor Tzig Data 18 mai 2020 17:12:21
Problema Ciclu hamiltonian de cost minim Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("hamilton.in");
ofstream g("hamilton.out");

const int NMAX = 20;
const int INF = 1e9;

int N,M;

int main()
{
    f>>N>>M;
    vector <vector <int> >X(N);
    int cost[NMAX][NMAX];
    while(M){
        int i,j,c;
        f>>i>>j>>c;
        X[j].push_back(i);
        cost[i][j]=c;
        M--;
    }
    vector <vector <int> > DP(1<<N, vector <int>(N,INF));
    DP[1][0]=0;
    for(int k=3;k<(1<<N);k+=2){
        for(int i=1;i<N;i++){
            if(k & (1<<i)){
                for(unsigned int j=0;j<X[i].size();j++){
                    DP[k][i]=min(DP[k][i],DP[k ^ (1<<i)][X[i][j]]+cost[X[i][j]][i]);
                }
            }
        }
    }
    int rez=INF;
    for(int i=1;i<N;i++){
        rez=min(rez,DP[(1<<N)-1][i]+cost[i][0]);
    }
    if(rez==INF){
        g<<"nu exista solutie";
    }else{
        g<<rez;
    }
    f.close();
    g.close();
    return 0;
}