Cod sursa(job #631631)

Utilizator paulyBereschi Paul pauly Data 9 noiembrie 2011 08:48:38
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <iostream>
#include <values>

int S[30],T[30],C[30],a[30][30],n;

void citire_matrice()
{ int i,j,x,y,k,;
cout<<"\n Numarul de varfuri";
cin>>n;
for (i=1;i<=n;i++)
a[i][i]=0;
for (i=1;i<=n-1;i++)
for (j=n+1;j<=n;j++)
{cout<<"/n Dati costul muchiei ("<<i<<","<<j<<"):";
cin>>a[i][j];
a[j][i]=a[i][j];}
}
voi 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;k++)
          {
              cost_min=INTMAX;
              n1=n2=-1;
              for (i=1;i<=n;i++)
              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_matricea();
                afisare_matricea();
                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);
                }