Pagini recente » Cod sursa (job #2951519) | Cod sursa (job #1781729) | Cod sursa (job #596508) | Cod sursa (job #602153) | Cod sursa (job #702642)
Cod sursa(job #702642)
#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]==0)
{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]);
}
}
if(c[conf][last]>0)
return c[conf][last];
else
return 0;
}
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--; }
c[1][0]=-1;
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;
}