Cod sursa(job #563077)

Utilizator c_adelinaCristescu Adelina c_adelina Data 24 martie 2011 13:24:01
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#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;}