Pagini recente » Cod sursa (job #1890932) | Cod sursa (job #710414) | Cod sursa (job #2334467) | Monitorul de evaluare | Cod sursa (job #1518150)
#include<iostream>
#include<fstream>
#include<cstring>
#include<vector>
using namespace std;
const int inf=0x3f3f3f3f;
const int NMAX=20;
ifstream si("hamilton.in");
ofstream so("hamilton.out");
vector<int> v[NMAX];
int cost[NMAX][NMAX];
int dp[1<<NMAX][NMAX];
int sol=inf;
int n;
void rez()
{
int i,j,k,m;
int N=(1<<n);
dp[1][0]=0;
for(i=1;i<N;++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[N-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";
so<<'\n';
}