Sunteți pe pagina 1din 2

ALGORITMUL LUI KRUSKAL

#include<iostream.h>
typedef struct muc
{
int ni,nf;
float cost;
};
int main()
{
int n,i,j,l,marc[100],p,c=0,m,gasit;
muc a[100],aux;
cout<<"Cite noduri sunt? "; cin>>n;
cout<<"Cite muchii sunt? "; cin>>m;
for(i=1;i<=m;i++){
cout<<"Introduceti nodul initial al muchiei "<<i; cin>>a[i].ni;
cout<<"Introduceti nodul final al muchiei "<<i; cin>>a[i].nf;
cout<<"Introduceti costul muchiei "<<i; cin>>a[i].cost;
}
do{
gasit=0;
for(i=1;i<=n-1;i++)
if(a[i].cost>a[i+1].cost){
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
gasit=1;
}
}while(gasit);
for(i=1;i<=n;i++)
marc[i]=0;
p=1;
do{
i=a[p].ni;
j=a[p].nf;
gasit=0;
if(marc[i]==0 && marc[j]==0){
gasit=1;
marc[i]=i;
marc[j]=i;
}
else
if(marc[i]*marc[j]==0){
gasit=1;
if(marc[i]==0)
marc[i]=marc[j];
else
marc[j]=marc[i];
}
else
if(marc[i]!=marc[j]){
gasit=1;
for(l=1;l<=n;l++)
if(marc[l]==marc[j])
marc[l]=marc[i];
}
if(gasit){
c++;
cout<<"("<<i<<";"<<j<<")";

}
p++;
}while(c<n-1);
return 0;
}

S-ar putea să vă placă și