Cod sursa(job #412378)

Utilizator IoannaPandele Ioana Ioanna Data 5 martie 2010 15:50:45
Problema Ciclu hamiltonian de cost minim Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#define nmax 20
int n,m;
int min=-1,v[nmax];

struct nod
{
	int info,c;
	nod *urm;
};

nod *t[nmax];

void InsertBegin(int a,int b,int c)
{
	nod *aux;
	aux=new nod;
	aux->info=b;
	aux->c=c;
	aux->urm=t[a];
	t[a]=aux;
}

void read()
{
	scanf("%d%d",&n,&m);
	int i,a,b,c;
	for (i=1;i<=m;i++)
	{
		scanf("%d%d%d",&a,&b,&c);
		InsertBegin(a,b,c);
	}
}

void dfs(int k,int c,int nr)
{
	if (k==0 && nr==n)
	{
		if (c<min || min<0)
			min=c;
		return;
	}
	nod *p;
	for (p=t[k];p!=NULL;p=p->urm)
	{
		if (!v[p->info])
		{
			v[p->info]=1;
			dfs(p->info,c+p->c,nr+1);
			v[p->info]=0;
		}
	}
}


int main()
{
	freopen("hamilton.in","r",stdin);
	freopen("hamilton.out","w",stdout);
	read();
	dfs(0,0,0);
	printf("%d\n",min);
	return 0;
}