1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#ifndef PATHS
#define PATHS
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <vector>
using namespace std;
#define infinity 999
class Paths
{
private :
int i,n,j,cost[10][10];
int dist[10],path[10],reach[10];
int adj[10][10];
int k,a,b,v,u,ne;
int visited[10],minimumcost,parent[9];
int minimum;
int d[10][10];
public :
void Prims();
void Dijkstra();
void Kruskal();
void Allpair();
void shortpath(int);
void printpath(int);
int choose();
};
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////// Kruskal
void Paths::Kruskal()
{
i,j,n,ne,a,b,u,v = 1;
//////////////////////
cout<<endl<<endl;
cout<<" Kruskal's Algorithm"<<endl;
cout<<"----------------------------------"<<endl;
///////////////
printf("\nEnter the number of vertices:");
scanf("%d",&n);
printf("Enter the cost of matrix::\n");
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
scanf("%d",&cost[i][j]);
if(cost[i][j]==0)
cost[i][j]=999;
}
printf("\nThe edges of spanning tree are:\n");
while(ne<n)
{
for (i=1,minimum=999;i<=n;i++)
{
for (j=1;j<=n;j++)
{
if(cost[i][j]<minimum)
{
minimum=cost[i][j];
a=u=i;
b=v=j;
}
}
}
while(parent[u])
u=parent[u];
while(parent[v])
v=parent[v];
if(u!=v)
{
printf("\n%d) Edge(%d,%d)=%d",ne++,a,b,minimum);
minimumcost += minimum;
parent[v]=u;
}
cost[a][b]=cost[b][a]=999;
}
printf("\n\n minimum cost is = %d\n",minimumcost);
}
|