Pagini recente » Cod sursa (job #2152985) | Cod sursa (job #2734850) | Cod sursa (job #588185) | Cod sursa (job #2916193) | Cod sursa (job #3273903)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
const int inf=0x3F3F3F3F;
vector<vector<int> > graf,dp;
int n,m,ans;
int hamilton(){
dp.assign((1<<n),vector<int>(n,inf));
dp[1][0]=0;
for(int mask=2;mask<dp.size();mask++){
if(mask&1){
for(int i=0;i<n;i++){
if(mask&(1<<i)){
for(int j=0;j<n;j++){
if(mask&(1<<j))
dp[mask][i]=min(dp[mask][i],dp[mask^(1<<i)][j]+graf[j][i]);
}
}
}
}
}
ans=inf;
for(int i=0;i<n;i++){
ans=min(dp[(1<<n)-1][i]+graf[i][0],ans);
}
if(ans==inf)return -1;
else return ans;
}
int main()
{
fin>>n>>m;
graf.assign(n,vector<int>(n,inf));
for(int i=0,x,y,c;i<m;i++){
fin>>x>>y>>c;
graf[x][y]=c;
}
ans=hamilton();
if(ans==-1)fout<<"Nu exista solutie";
else fout<<ans;
return 0;
}