Pagini recente » Cod sursa (job #902012) | Cod sursa (job #2768375) | Cod sursa (job #253618) | Cod sursa (job #950991) | Cod sursa (job #1611617)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <map>
#include <iomanip>
#include <set>
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
const int MAXN = 20;
const int MAXX = 263150;
const int INF = 2000000000;
int n, m, sol,i,j,a,b,q;
int cost[MAXN][MAXN];
int dp[MAXX][MAXN];
vector <int> v[MAXN];
int main()
{
f>>n>>m;
memset(dp,INF,sizeof(dp));memset(cost,INF,sizeof(cost));
for(i=1;i<=m;i++)
{
int x, y;
f >> x >> y;
v[y].push_back(x);
f >> cost[x][y];
}
dp[1][0]=0;
for(i=1;i< (1<<n);++i)
for(j=0;j<n;++j)
if(i&(1<<j))
for(q=0;q<v[j].size();++q)
if(i&(1<<v[j][q]))
dp[i][j]=min(dp[i][j],dp[i ^ (1<<j)][v[j][q]]+cost[v[j][q]][j]);
sol=INF;
for(i=0;i<v[0].size();++i)
sol=min(sol,dp[(1<<n) -1][v[0][i]]+cost[v[0][i]][0]);
if(sol==INF) g<<"Nu exista solutie";
else
g<<sol;
return 0;
}