Cod sursa(job #773958)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 3 august 2012 01:15:09
Problema Ciclu hamiltonian de cost minim Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#define LE 20
#define inf 1<<30
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int n,A[LE][LE],sum,st[LE],cost,rez,fr[LE],m,i,x,y;
void sums()
{
	sum=0;
      for(int j=2;j<=n;++j) 
		  {
			  if (A[st[j-1]][st[j]]==0) return ;
			  sum+=A[st[j-1]][st[j]];
		  
		  }
	  if (A[st[n]][1]) {
		  sum+=A[st[n]][st[1]];
		  rez=min(rez,sum);
	  }
}
int main()
{

	f>>n>>m;
	for(i=1;i<=m;++i)
	{
	  f>>x>>y>>cost;
	  A[x+1][y+1]=cost;
	}
	
	st[1]=1;
	rez=inf;
	for(i=2;i<=n;++i) st[i]=i;
	
	for(i=1;i<=300000;++i){
	random_shuffle(st+2,st+n+1);
	sums();
	}
	
	if (rez==inf) g<<"Nu exista solutie"; else 
	g<<rez<<'\n';
	f.close();g.close();
	return 0;
}