using
System;
class
GFG
{
static
int
V = 5;
static
int
INT_MAX =
int
.MaxValue;
static
bool
isValidEdge(
int
u,
int
v,
bool
[] inMST)
{
if
(u == v)
return
false
;
if
(inMST[u] ==
false
&& inMST[v] ==
false
)
return
false
;
else
if
(inMST[u] ==
true
&&
inMST[v] ==
true
)
return
false
;
return
true
;
}
static
void
primMST(
int
[,]cost)
{
bool
[]inMST =
new
bool
[V];
inMST[0] =
true
;
int
edge_count = 0, mincost = 0;
while
(edge_count < V - 1)
{
int
min = INT_MAX, a = -1, b = -1;
for
(
int
i = 0; i < V; i++)
{
for
(
int
j = 0; j < V; j++)
{
if
(cost[i, j] < min)
{
if
(isValidEdge(i, j, inMST))
{
min = cost[i, j];
a = i;
b = j;
}
}
}
}
if
(a != -1 && b != -1)
{
Console.Write(
"Edge {0}:({1}, {2}) cost: {3} \n"
,
edge_count++, a, b, min);
mincost = mincost + min;
inMST[b] = inMST[a] =
true
;
}
}
Console.Write(
"\n Minimum cost = {0} \n"
, mincost);
}
public
static
void
Main(String[] args)
{
int
[,]cost = {{ INT_MAX, 2, INT_MAX, 6, INT_MAX },
{ 2, INT_MAX, 3, 8, 5 },
{ INT_MAX, 3, INT_MAX, INT_MAX, 7 },
{ 6, 8, INT_MAX, INT_MAX, 9 },
{ INT_MAX, 5, 7, 9, INT_MAX }};
primMST(cost);
}
}