Pagini recente » Cod sursa (job #2194617) | Cod sursa (job #2986006) | Cod sursa (job #573948) | Cod sursa (job #2031508) | Cod sursa (job #1744726)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
const int inf=0x3f3f3f3f;
const int NMAX=19 ;
ifstream si("hamilton.in");
ofstream so("hamilton.out");
vector<int> v[NMAX];
int cost[NMAX][NMAX];
int dp[(1<<(NMAX-1))+1][NMAX+2];
int sol=inf;
int n;
void rez()
{
int i,j,k,m;
int p2=1<<n;
dp[1][0]=0;
for(i=1;i<p2;++i)
{
for(j=0;j<n;++j)
{
if(i&(1<<j))
{
m=v[j].size();
for(k=0;k<m;++k)
{
if(i&(1<<v[j][k]))
{
dp[i][j]=min(dp[i][j],dp[i^(1<<j)][v[j][k]]+cost[v[j][k]][j]);
}
}
}
}
}
m=v[0].size();
for(i=0;i<m;++i)
{
sol=min(sol,dp[p2-1][v[0][i]]+cost[v[0][i]][0]);
}
}
int main()
{
int m;
si>>n>>m;
int i,n1,n2;
memset(cost,inf,sizeof(cost));
memset(dp,inf,sizeof(dp));
for(i=0;i<m;++i)
{
si>>n1>>n2;
v[n2].push_back(n1);
si>>cost[n1][n2];
}
rez();
if(sol!=inf)
so<<sol;
else
so<<"Nu exista solutie";
return 0;
}