Cod sursa(job #632161)

Utilizator iuliannnTatar Cornel iuliannn 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;}