-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkrus.java
More file actions
80 lines (69 loc) · 1.68 KB
/
krus.java
File metadata and controls
80 lines (69 loc) · 1.68 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
#include<iostream>
using namespace std;
class kruskal{
int **edge,*parent,n,e;
int cost;
public:
kruskal(){
cout<<"ver no. , edge"<<endl;
cin>>n>>e;
*edge=new int*[e];
for(int i=0;i<e;i++){
edge[i]=new int[e];
cout<<"u v val"<<endl;
cin>>edge[i][0]>>edge[i][1]>>edge[i][2];
}
parent=new int[n];
for(int j=0;j<n;j++){
parent[i]=i;
}
}
~kruskal(){
for(int i=0;i<e;i++){
delete[] edge[i];
}
delete[] edge;
delete[] parent;
}
int find(int x) {
while(parent[x] != x) x=parent[x];
return x;
}
void unionset(int x,int y){
parent[find(x)]=find(y);
}
void sortt(){
for(int i=0;i<e;i++){
for(int j=0;j<e-i;j++){
if(edge[j][2]>edge[j+1][2]){
for(int k=0;k<3;k++){
int temp=edge[j+1][k];
edge[j+1][k]=edge[j][k];
edge[j][k]=temp;
}
}
}
}
}
void findmst(){
sortt();
int count;
for(int i=0;i<e;i++){
if(find(edge[i][0]) != find(edge[i][1])){
cout<<edge[i][0]<<" " << edge[i][1]<<endl;
cost+=edge[i][2];
unionset(edge[i][0],edge[i][1]);
count++;
}
if(count==n-1){
break;
}
}
cout<<"min cost "<<cost<<endl;
}
};
int main(){
kruskal ob;
ob.findmst();
return 0;
}