Pagini recente » Cod sursa (job #1893335) | Cod sursa (job #2091839) | Cod sursa (job #1901385) | Cod sursa (job #198358) | Cod sursa (job #2497827)
#include <fstream>
#include <cmath>
#include <algorithm>
#define MAX 1000001
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
int n,m,min1=INF;
struct NodCost{
int nod,cost;
};
vector <NodCost> G[21];
int dp[MAX][20];
void rezolvare()
{
int stare,i,j;
for (stare=1; stare<=((1<<n)-1); stare++)
{
for (i=0; i<n; i++)
{
if (((1<<i) & stare)>0)
{
for (auto j:G[i])
{
if (((1<<j.nod) & stare)>0)
dp[stare+(1<<j.nod)][j.nod]=min(dp[stare+(1<<j.nod)][j.nod],dp[stare][i]+j.cost);
}
}
}
}
}
int main()
{
int i,a,b,c;
fin>>n>>m;
for (i=1; i<=n; i++)
{
fin>>a>>b>>c;
G[a].push_back({b,c});
}
for (i=1; i<=(1<<n)-1; i++)
{
for (int j=1; j<=n; j++)
{
dp[i][j]=INF;
}
}
rezolvare();
for (i=1; i<n; i++)
{
for (auto j:G[i])
{
if (j.nod==0)
{
min1=min(min1,dp[(1<<n)-1][i]+j.cost);
}
}
}
fout<<min1;
return 0;
}