Cod sursa(job #632130)

Utilizator 4ddyMuresan Andrei Petru 4ddy Data 10 noiembrie 2011 13:56:29
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.46 kb
#include<iostream.h>
#include<values.h>
int S[30],T[30],C[30],a[30][30],n;

void citire_mesaj()
{
     int i,j,k,x,y;
     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=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;k++)
                   {
                       cost_min=MAXINT;
                       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 caracterestic S este",S,n);
                           afisare_arbore("vectorul parintilor T este",T,n);
                           afisare_arbore("vectorul costurilor C este",C,n);
                           }
                      system("pause")
                      return  0;