Pagini recente » Cod sursa (job #1421958) | Cod sursa (job #2288511) | Cod sursa (job #768014) | Cod sursa (job #1968422) | Cod sursa (job #2850280)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("hamilton.in");
ofstream out("hamilton.out");
const int N=19;
const int INF=1e9;
int dp[1<<N][N], cost[N][N];
vector<int>graf[N];
int main()
{
int n, m;
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 < (1<<n) ; i+=2)
{
for(int j = 0 ; j < n ; j++)
{
dp[i][j] = INF;
}
}
dp[1][0]=0;
for (int i=0; i<m; i++)
{
int x, y, c;
in>>x>>y>>c;
cost[x][y]=c;
graf[y].push_back(x);
}
for(int i=0;i<(1<<n);i++)
{
for(int j=0;j<n;j++)
{
if((1<<j)&i)
{
for(auto k:graf[j])
{
if((1<<k)&i)
{
dp[i][j]=min(dp[i][j],dp[i^(1<<j)][k]+cost[k][j]);
}
}
}
}
}
int sol=INF;
for (auto i:graf[0])
{
sol=min(sol,dp[(1<<n)-1][i]+cost[i][0]);
}
if (sol==INF)
{
out<<"Nu exista solutie";
}
else
{
out<<sol;
}
return 0;
}