Pagini recente » Cod sursa (job #1316060) | Cod sursa (job #1357181) | Cod sursa (job #299243) | Cod sursa (job #669645) | Cod sursa (job #884318)
Cod sursa(job #884318)
#include<fstream>
#include<iostream>
using namespace std;
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(int v=1;v<=m;v++)
{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(int 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;
}