Cod sursa(job #1611597)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 24 februarie 2016 11:51:11
Problema Ciclu hamiltonian de cost minim Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
int i,j,n,m,z,q,k;
const int inf = 2000000000;
int dp[263150][20],cost[20][20];
vector <int> v[20];
int main()
{
    fin >> n>> m;
    memset(dp,inf,sizeof(dp));
    memset(cost,inf,sizeof(cost));
    for(i = 1; i <= m; i++)
    {
        int a,b,c;
        fin >> a >> b >> c;
        cost[a][b] = c;
        v[b].push_back(a);
    }
    dp[1][0] = 0;
    for(i = 0; i < 1<<n; i++)
        for(j = 0; j < n; j++)
            if(i & (1<<j))
                for(q = 0; q < v[j].size(); q++)
                    if(i & (1<<v[j][q]))
                        dp[i][j] = min(dp[i][j], dp[i ^ (1<<j)][v[j][q]] +cost[v[j][q]][j]);
    int mini = inf;
    k = 1<<n;
    k--;
    for(i = 0 ; i < v[0].size(); i++)
        mini= min(mini, dp[k][v[0][i]] + cost[v[0][i]][0]);
    if(mini!=inf)
        fout<<mini;
    else
        fout<<"Nu exista solutie";
    return 0;
}