Pagini recente » Cod sursa (job #1776752) | Cod sursa (job #375066) | Cod sursa (job #1076548) | Cod sursa (job #1554545) | Cod sursa (job #702553)
Cod sursa(job #702553)
#include <vector>
#include <fstream>
#define mcon 262146
#define pb(x) push_back(x)
using namespace std;
vector<int> v[20];
int cost[20][20],c[mcon][20],n,m,x,y,rez=1<<30;
int chcm(int conf,int last)
{
if(c[conf][last]==1000000000)
{for(int i=0;i<v[last].size();i++)
if(conf&(1<<v[last][i]))
{
if(conf==(1<<last)+1||v[last][i]!=0)
c[conf][last]=min(c[conf][last],chcm(conf^(1<<last),v[last][i])+cost[v[last][i]][last]);
}
}
return c[conf][last];
}
int main ()
{int i,j;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
f>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cost[i][j]=1000000000;
while(m)
{f>>x>>y;
v[y].pb(x);
f>>cost[x][y];
m--; }
for(i=0;i<mcon;i++)
for(j=0;j<=n;j++)
{c[i][j]=1000000000;
}
c[1][0]=0;
for(i=0;i<v[0].size();i++)
rez=min(rez,chcm((1<<n)-1,v[0][i])+cost[v[0][i]][0]);
if(rez!=1000000000)
g<<rez;
else
g<<"Nu exista solutie";
f.close(); g.close();
return 0;
}