Está en la página 1de 3

#include <iostream>

#include <string>

#include <vector>

#include <algorithm>

#include <list>

#include<stdio.h>

#include<conio.h>

#define DEBUG

#define REPETICION(i,a) for(i=0;i<a;i++)

#define FOR(i,a,b) for(i=a;i<b;i++)

#define ii pair<int,int>

using namespace std;

vector<int> grafov;

vector<pair<int,ii> >grafo;

void inicio(int size)

int i;

grafov.resize(size);

REPETICION(i,size+1)

grafov[i]=i;

int encontrar(int i)

return (grafov[i]==i)? i:(grafov[i]=encontrar(grafov[i]));

void unir(int i,int j)

{
grafov[encontrar(i)]=encontrar(j);

bool isSameSet(int i,int j)

if(encontrar(i) == encontrar(j))

return true;

return false;

void kruskal(int N)

{int sum=0,i;

inicio(N);

sort(grafo.begin(),grafo.end());

for(i=0;i<grafo.size();i++)

{ pair<int,ii>aux=grafo[i];

if(!isSameSet(aux.second.first,aux.second.second))

cout<<"Pasa en: "<<aux.second.first<<","<<aux.second.second<<endl;

sum=aux.first+sum;

unir(aux.second.first,aux.second.second);

cout<< " " <<endl;

cout<< " " <<endl;

cout<<"El peso total es: "<<sum;

int main(){

int V,A,i,a,b,w;

cout<<"\t\t *** ALGORITMO DE KRUSKAL ***"<<endl;


cout<< " " <<endl;

cout<< " " <<endl;

cout<<"Ingrese el numero de aristas: "<<endl;

cin>>A;

cout<<"Ingrese el numero de vertices: "<<endl;

cin>>V;

cout<< " " <<endl;

cout<< " " <<endl;

cout<<"Ingrese el peso desde un vertice hacia otro"<<endl;

cout<<"NOTA: Los vertices son representados por numeros "<<endl;

cout<< " " <<endl;

for(i=0;i<A;i++){

cout<<"Del vertice: "; cin>>a; cout<<"al vertice: ";cin>>b;

cout<<"Peso: "; cin>>w;

grafo.push_back(pair<int,ii>(w,ii(a,b)));

cout<< " " <<endl;

cout<< " " <<endl;

kruskal(V);

getch();

return 0;

También podría gustarte