Pagini recente » Cod sursa (job #1902437) | Cod sursa (job #2662951) | Cod sursa (job #1016217) | Cod sursa (job #2116088) | Cod sursa (job #1969396)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
const int inf=0x3f3f3f3f;
int cost[20][20],C[(1<<20)][20];
vector<int>A[20];
int calc(int start,int conf,int last)
{
if(C[conf][last]==-1)
{
C[conf][last]=inf;
for(unsigned j=0;j<A[last].size();j++)
{
if(conf&(1<<A[last][j]))
{
if(A[last][j]==start && ((conf^(1<<last))!=(1<<start))) continue;
C[conf][last]=min(C[conf][last],calc(start,conf^(1<<last),A[last][j])+cost[A[last][j]][last]);
}
}
}
return C[conf][last];
}
int main()
{
int n,m,a,b;
fin>>n>>m;
memset(cost,inf,sizeof(cost));
while(m--)
{
fin>>a>>b;
fin>>cost[a][b];
A[b].push_back(a);
}
int sol=inf;
for(int i=0;i<n;i++)
{
memset(C,-1,sizeof(C));
C[1<<i][i]=0;
for(unsigned j=0;j<A[i].size();j++)
{
sol=min(sol,calc(i,(1<<n)-1,A[i][j])+cost[A[i][j]][i]);
}
}
if(sol==inf) fout<<"Nu exista solutie";
else fout<<sol;
}