Pagini recente » Cod sursa (job #1247665) | Cod sursa (job #2570359) | Cod sursa (job #2612917) | Cod sursa (job #163061) | Cod sursa (job #562991)
Cod sursa(job #562991)
#include <fstream.h>
#define INF 20000000
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int c[18][18],mc[18][18],sol[1<<18][18];
inline int mi(int x,int y) {return ((x<y)? x:y);}
int rez(int secv,int l)
{
if (sol[secv][l]) return sol[secv][l];
sol[secv][l]=INF;
for (int i=1;i<=mc[l][0];++i)
if (secv&(1<<mc[l][i]))
{
if ((mc[l][i]==0) && (secv!=(1<<0)))
continue;
sol[secv][l]=mi(sol[secv][l],rez(secv^(1<<mc[l][i]),mc[l][i])+c[mc[l][i]][l]);
}
return sol[secv][l];
}
int main()
{
int n,m,min=INF,i,j,x;
f>>n>>m;
while (m--)
{
f>>i>>j;
f>>c[i][j];
mc[j][++mc[j][0]]=i;
}
sol[0][0]=1;
for (x=1;x<=mc[0][0];++x)
min=mi(min,rez(((1<<n)-1)^(1<<mc[0][x]),mc[0][x])+c[mc[0][x]][0]);
if (min!=INF)
g<<min-1; else g<<"Nu exista solutie";
f.close();
g.close();
return 0;}