Pagini recente » Cod sursa (job #1650796) | Cod sursa (job #1710938) | Rating Mironica Paul Ciprian (Mironica_Paul_Ciprian_322CA) | Cod sursa (job #535743) | Cod sursa (job #884302)
Cod sursa(job #884302)
#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;
}