Pagini recente » Profil Emyy | Cod sursa (job #1114458) | Monitorul de evaluare | Cod sursa (job #2367748) | Cod sursa (job #1555464)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
#define NMAX 19
#define MAXX 262200
#define INF 10000000
int n,m,x,y,co,viz[NMAX],sol = INF;
vector<int> a[NMAX];
int cost[NMAX][NMAX],C[MAXX][NMAX];
int calcul(int start, int config, int last)
{
if(C[config][last]==-1)
{
C[config][last] = INF;
for(int i=0;i<a[last].size();i++)
{
if(config & (1<<a[last][i]))
{
if(a[last][i] == start && ((config^(1<<last))!=(1<<start))) continue;
C[config][last] = min(C[config][last],calcul(start,config ^ (1<<last),a[last][i])+cost[a[last][i]][last]);
}
}
}
return C[config][last];
}
int main()
{
ifstream in("hamilton.in");
ofstream out("hamilton.out");
in >> n >> m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cost[i][j] = INF;
for(int i=0;i<m;i++)
{
in >> x >> y >> co;
a[y].push_back(x);
cost[x][y] = co;
}
for(int i=0;i<n;i++)
{
memset(C,-1,sizeof(C));
C[1<<i][i]=0;
for(int j=0;j<a[i].size();j++)
{
sol = min(sol, calcul(i,(1<<n)-1,a[i][j])+cost[a[i][j]][i]);
}
}
if(sol==INF)
out << "Nu exista solutie";
else
out << sol;
return 0;
}