Pagini recente » Cod sursa (job #2307309) | Cod sursa (job #2320362) | Cod sursa (job #933955) | Cod sursa (job #427661) | Cod sursa (job #1798709)
#include<cstdio>
#include<vector>
using namespace std;
int d[18][262144];
struct ceva{int nod,cost;};
vector <ceva> g[18];
int mini(int a,int b){
if(a<b)
return a;
else
return b;
}
int main(){
int n,m,i,k,p,cs,j,mask,ans;
ceva c;
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d%d",&k,&p,&cs);
c.nod=k;
c.cost=cs;
g[p].push_back(c);
}
for(i=0;i<n;i++)
for(j=0;j<(1<<n);j++)
d[i][j]=2e9;
d[0][1]=0;
for(mask=0;mask<(1<<n);mask++)
for(i=0;i<n;i++)
if(mask&(1<<i))
for(j=0;j<g[i].size();j++){
k=g[i][j].nod;
if(mask&(1<<k))
d[i][mask]=mini(d[i][mask],d[k][mask-(1<<i)]+g[i][j].cost);
}
ans=2e9;
for(i=0;i<g[0].size();i++)
ans=mini(ans,d[g[0][i].nod][(1<<n)-1]+g[0][i].cost);
if(ans==2e9)
printf("Nu exista solutie");
else
printf("%d",ans);
return 0;
}