Cod sursa(job #884302)

Utilizator AndreiN95Nicoara Andrei AndreiN95 Data 20 februarie 2013 20:48:20
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include<fstream.h>
 const float PInfinit = 1.e20;
 void Citire_Cost(char Nume_fis[20],float A[50][50],int&n,int&m,int&k,int C[50])
 {
	 int i,j;
	 float c;
	 fstream f (Nume_fis,ios::in);
	 f>>n;
	 for(i=1;i<=n;i++)
		 for(j=1;j<=n;j++)
			 if(i==j)
				 A[i][j]=A[j][i]=0;
			 else
				 A[i][j]=A[j][i]=PInfinit;
			 f>>m;
			 f>>k;
			  for(int x=1;x<=k;x++)
			  f>>C[x];
				  for(x=1;x<=m;x++)
			  {f>>i>>j>>c;
			  A[i][j]=A[j][i]=c;}
			  f.close();
 }float A[50][50];
int n,m,y,C[50],S=0;
void Drum(int i,int j)
{
	int k=1,gasit=0;
	while((k<=n) && !gasit)
	{ if(i!=k && j!=k && A[i][j]==A[i][k]+A[k][j])
	{Drum(i,k);
	Drum(k,j);
	gasit=1;}
	k++;
	} if(!gasit)
		cout<<j<<" ";
}
void Scriu_Drum(int Nod_Initial, int Nod_Final)
{
	if(A[Nod_Initial][Nod_Final]<PInfinit)
	{cout<<endl;
		cout<<"Drumul de la "<<Nod_Initial<<" la "<<Nod_Final<<" are lungimea "<<A[Nod_Initial][Nod_Final]<<endl;
		cout<<Nod_Initial<<" ";
		S=S+A[Nod_Initial][Nod_Final];
		Drum(Nod_Initial,Nod_Final);
	}
	else
		cout<<"Nu exista drum de la "<<Nod_Initial<<" la "<<Nod_Final;
}
void Lungime_Drumuri()
{
	int i,j,k;
	for(k=1;k<=n;k++)
		for(i=1;i<=n;i++)
			for(j=1;j<=n;j++)
				if(A[i][j]>A[i][k]+A[k][j])
					A[i][j]=A[i][k]+A[k][j];
}
int main()
{	int L=0;
	Citire_Cost("ubuntzei.in",A,n,m,y,C);
	Lungime_Drumuri();
	cout<<y<<endl;
		for(int x=1;x<=y;x++)
cout<<C[x]<<" ";
		cout<<endl;
	int i=1;
	Scriu_Drum(1,C[1]);
	for( x=1;x<y;x++)
	if(x+1<=y)
	Scriu_Drum(C[x],C[x+1]);
	Scriu_Drum(C[y],n);
	ofstream g("ubuntzei.out");
	cout<<"SUMA= "<<S<<endl;
	S=L;
	g<<L;
return 0;
}