Cod sursa(job #701841)

Utilizator judgment7Andrei Aldea judgment7 Data 1 martie 2012 18:05:04
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<iostream>
#include<fstream>
using namespace std;
int v[206],loc[206],a[206][206],n,m,k_oras,d_min=100000000;
#define inf 1000000
void verifica()
{
	int s=0;
	s+=a[1][loc[1]];
	for(int i=1;i<k_oras;i++)
	{
		s+=a[loc[i]][loc[i+1]];
	}
	s+=a[loc[k_oras]][n];
	if(s<d_min)
		d_min=s;
}
void perm(int k)
{
	if(k==k_oras+1)
	verifica();	
	else
	{		
	v[k]=loc[k];
	for(int i=1;i<=k;i++)
	{
		int aux=v[i];
		v[i]=v[k];
		v[k]=aux;
		perm(k+	1);
		aux=v[i];
		v[i]=v[k];
		v[k]=aux;
	}
	}
}
void roy_floyd()
{
	for(int c=1;c<=n;c++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(a[i][c]+a[c][j]<a[i][j])
					a[i][j]=a[i][c]+a[c][j];
}
void citire()
{
	int i,j,c;
	ifstream f("ubuntzei.in");
	f>>n>>m;
	f>>k_oras;
	for(i=1;i<=k_oras;i++)
		f>>loc[i];
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(i!=j)a[i][j]=inf;
			else a[i][j]=0;
	while(f>>i>>j>>c)
	a[i][j]=c,a[j][i]=c;
}
int main()
{
	citire();
	roy_floyd();
	ofstream g("ubuntzei.out");
	if(k_oras>0){
		sort(loc,loc+k_oras);
		do
		{
			int s=a[1][loc[1]]+a[loc[k_oras]][n];
			for(int i=1;i<k_oras;i++)
				s+=a[loc[i]][loc[i+1]];
			d_min=min(s,d_min);
			
		}while(next_permutation(loc,loc+k_oras));
	//perm(1);
cout<<d_min;
}
else
	g<<a[1][n];
}