Pagini recente » Cod sursa (job #2428404) | Cod sursa (job #2124383) | Cod sursa (job #1608895) | Cod sursa (job #1332971) | Cod sursa (job #2374698)
#include <bits/stdc++.h>
#define dim 18
#define inf int(1e9)+5
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int n,m;
int cost[dim+5][dim+5],dp[(1<<dim)][dim+5];
vector <int> graph[dim+5];
void Read()
{
f>>n>>m;
for(int i=1; i<=m; ++i)
{
int x,y,c;
f>>x>>y>>c;
graph[x].push_back(y);
cost[x][y]=c;
}
}
void Solve()
{
memset(dp,inf,sizeof(dp));
for(int i=0; i<n; ++i)
dp[1][i]=0;
for(int step=1; step<(1<<n); ++step)
for(int i=0; i<n; ++i)
if(step&(1<<i))
for(int j=0; j<graph[i].size(); ++j)
{
int son=graph[i][j];
if(step&(1<<son))
dp[step][i]=min(dp[step][i],dp[step^(1<<i)][son]+cost[i][son]);
}
int ans=inf;
for(int i=0; i<n; ++i)
if(cost[0][i]!=0)
ans=min(ans,dp[(1<<n)-1][i]+cost[0][i]);
if(ans!=inf)
g<<ans;
else
g<<"Nu exista solutie";
}
int main()
{
Read();
Solve();
return 0;
}