-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkruskals.cpp
More file actions
118 lines (118 loc) · 1.84 KB
/
kruskals.cpp
File metadata and controls
118 lines (118 loc) · 1.84 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include<iostream>
#define MAX 20
using namespace std;
enum MyColor {W,B};
struct Edge
{
int u,v;
int Cost;
MyColor Color;
};
struct Vertex
{
int value;
int Set;
};
class Graph
{
Edge *E;
Vertex *V;
int nV,nE;
public:
Graph(int,int,int [][MAX]);
void Kruskals();
void SortEdges();
void ShowSpanningTree();
};
void Graph::SortEdges()
{
Edge t;
for(int i=0;i<nE;i++)
{
for(int j=i+1;j<nE;j++)
{
if(E[j].Cost<E[i].Cost)
{
t = E[j];
E[j] = E[i];
E[i] = t;
}
}
}
}
Graph::Graph(int e, int v, int w[][MAX])
{
nE = e;
nV = v;
E = new Edge[nE];
V = new Vertex[nV];
int k=0;
for(int i=0;i<nV;i++)
{
for(int j=0;j<i;j++)
{
if(w[i][j]!=0)
{
E[k].u = i;
E[k].v = j;
E[k].Cost = w[i][j];
E[k].Color = W;
k++;
}
}
V[i].value = i;
V[i].Set = i;
}
}
void Graph::ShowSpanningTree()
{
int mincost=0;
cout<<"\n\nMinimum Spanning Tree Edges:";
for(int i=0;i<nE;i++)
{
if(E[i].Color==B)
{
cout<<"\n\t";
cout<<E[i].u<<"--"<<E[i].v<<" : Cost-"<<E[i].Cost;
mincost += E[i].Cost;
}
}
cout<<"\n\nMinimum Cost: "<<mincost;
}
void Graph::Kruskals()
{
SortEdges();
int a,b;
for(int i=0;i<nE;i++)
{
if(V[E[i].u].Set!=V[E[i].v].Set)
{
E[i].Color = B;
a = V[E[i].u].Set;
b = V[E[i].v].Set;
for(int j=0;j<nV;j++)
{
if(V[j].Set == a)
V[j].Set = b;
}
}
}
}
int main()
{
int nV = 9;
int nE = 14;
int b[][MAX]={ {0,4,0,0,0,0,0,8,0},
{4,0,8,0,0,0,0,11,0},
{0,8,0,7,0,4,0,0,2},
{0,0,7,0,9,14,0,0,0},
{0,0,0,9,0,10,0,0,0},
{0,0,4,14,10,0,2,0,0},
{0,0,0,0,0,2,0,1,6},
{8,11,0,0,0,0,1,0,7},
{0,0,2,0,0,0,6,7,0}};
Graph g(nE,nV,b);
g.Kruskals();
cout<<"\nKruskal's Result:\n";
g.ShowSpanningTree();
}