Cod sursa(job #632161)
Utilizator | Data | 10 noiembrie 2011 14:30:51 | |
---|---|---|---|
Problema | Arbore partial de cost minim | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 3.36 kb |
#include<iostream.h>
#include<values.h>
int S[30],T[30],C[30],a[30][30],n;
void citire_matrice()
{
int i,j,k,x,y;
cout << " \n Numarul de varfuri ";
cin>>n;
for(i=1;i<=n;i++)
a[i][j]=0;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
{
cout << "\n Dati costul muchiei (" << i << "," << j << ") : ";
cin>>a[i][j];
a[j][i]=a[i][j];
}
}
void afisare_matrice ()
{
int i,j;
cout << "\n matricea de adiacenta este : \n";
for(i=1;i<=n;i++)
{
cout << "\n";
for (j=1;j<=n;j++)
cout << a[i][j] << " ";
}
}
void afisare_arbore (char mesaj[20],int v[20], int n)
{
int i;
cout << endl << mesaj;
for(i=1;i<n;i++)
cout << v[i] << " ";
}
void formare_arbore()
{
int k,i,j,start,cost_min,n1,n2;
for(i=1;i<=n;i++)
S[i]=T[i]=C[i]=0;
cout << "\n Dati varful de start";
cin>>start;
S[start]=1;
for(k=1;k<=n-1;i++)
{
cost_min=INT_MAX;
n1=n2=-1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (S[i]==1 && S[j]==0)
if (a[i][j])
if (a[i][j]<cost_min)
{
cost_min=a[i][j];
n1=i; n2=j;
}
S[n2]=1;
T[n2]=n1;
C[n2]=a[n1][n2];
}
}
void main ()
{
citire_matrice ();
afisare_matrice ();
formare_arbore ();
afisare_arbore(" vectorul caracteristic S este ",S,n);
afisare_arbore("vectorul parintilor T este ",T,n);
afisare_arbore("vectorul costurilor C este ",C,n);
system ("pause");
return 0;}