Cod sursa(job #1125145)

Utilizator cristi103tiron cristian cristi103 Data 26 februarie 2014 15:55:02
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.44 kb
#include<fstream>
#include <algorithm>
using namespace std;
ofstream cout ("apm.out");
int a[100][100],n,i,infinit=1000000,s[100],x,y,m,j,cost,start,t[100],nrc=0,k=0;

typedef struct o_muchie
{
        int x,y,cost;
        }
        TIPUL_MUCHIE;
        
TIPUL_MUCHIE v[100],muchiile_apm[100];

void citire()
{ ifstream f("apm.in");
f>>n>>m;
     
for(i=1;i<=m;i++)
         f>>v[i].x>>v[i].y>>v[i].cost;
               

  
 f.close();
 
 }

void ordoneaza_muchiile()
{
  int ordonat;
  TIPUL_MUCHIE aux;
  do{
      ordonat=1;
        for(i=1;i<m;i++)
           if (v[i].cost>v[i+1].cost)
              {
              aux=v[i];
              v[i]=v[i+1];
              v[i+1]=aux;
              ordonat=0;
              }
              }
           while(ordonat==0);
  
  
  
}
void apm_kruskal()
{
     int o_adaugam,xx,yy,nr_componentei_lui_xx=0;
    
    for(i=1;i<=m;i++)
      
      {
      
      o_adaugam=1;
      xx=v[i].x;
      yy=v[i].y;
    
   
         if (t[xx]==0&&t[yy]==0) {nrc++;
                                       t[xx]=t[yy]=nrc;
                                       }
                                       
        else
            if (t[xx]!=0&&t[yy]==0) t[yy]=t[xx];
            else
              if (t[xx]==0&&t[yy]!=0) t[xx]=t[yy];
              else
           if (t[xx]!=t[yy])
               {
                  nr_componentei_lui_xx=t[xx];
                  for(j=1;j<=n;j++)
                    if (t[j]==nr_componentei_lui_xx)
                      t[j]=t[yy];
                      }
                      else 
                    
           o_adaugam=0;
                      
       if (o_adaugam==1)
          {            k++;
                       muchiile_apm[k].x=v[i].x;
                       muchiile_apm[k].y=v[i].y;
                       muchiile_apm[k].cost=v[i].cost;
                       }
       }                        
}         


void afisare()
{int s=0;
     cout<<endl;
     for(i=1;i<=k;i++)
       
                      s=s+muchiile_apm[i].cost;
                      
                      cout<<s<<endl;
                      
                       for(i=1;i<=k;i++)
       
                      cout<<muchiile_apm[i].x<<" "<<muchiile_apm[i].y<<endl;
       }    
int main()
{
    citire();
    
    ordoneaza_muchiile();
    
    
    apm_kruskal();
    
    afisare();
    
    return 0;
}