0% found this document useful (0 votes)
33 views

Chp3 - Graphs in DSA

The document discusses graphs and their representations. It defines graphs and key graph terminology. It also describes common graph representations like adjacency matrices and adjacency lists, and graph traversal algorithms like breadth-first search and depth-first search.

Uploaded by

Komal Rathod
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views

Chp3 - Graphs in DSA

The document discusses graphs and their representations. It defines graphs and key graph terminology. It also describes common graph representations like adjacency matrices and adjacency lists, and graph traversal algorithms like breadth-first search and depth-first search.

Uploaded by

Komal Rathod
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 78

Chapter 3: Graphs

3.1 Concept and terminologies


3.2 Graph Representation –Adjacency matrix,
Adjacency list, Inverse Adjacency list, Adjacency
multi-list
3.3 Graph Traversals – Breadth First Search and
Depth First Search (with implementation)
3.4 Applications of graph
Chapter 3: Graphs
3.4 Applications of graph
3.4.1 Topological sorting
3.4.2 Use of Greedy Strategy in Minimal Spanning
Trees (Prims and Kruskals algorithm)
3.4.3 Single source shortest path - Dijkstra’s
algorithm
3.4.4 Dynamic programming strategy, All pairs
shortest path - Floyd Warshall algorithm
3.4.5 Use of graphs in social networks
Introduction
• One of the Most versatile data structures like
trees.
• Terminology
– Nodes in trees are vertices in graphs.
– Lines connecting vertices are edges.
– Each edge is bounded by two vertices at its ends.
– Two vertices are said to be adjacent to one
another if they are connected by a single edge.
Introduction (Terminology)

• Vertices adjacent to a given vertex are called


its neighbors.
• A path is a sequence of edges.
• A graph is said to be connected if there is at
least one path from every vertex to every
other vertex.
• A non-connected graph consists of several
connected components.
Sample of graph app
GRAPHS

All the programs in this presentation are selected from


Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed
“Fundamentals of Data Structures in C”,
Computer Science Press, 1992.

6
Definition
 A graph G consists of two sets
– a finite, nonempty set of vertices V(G)
– a finite, possible empty set of edges E(G)
– G(V,E) represents a graph
 An undirected graph is one in which the pair of
vertices in a edge is unordered, (v0, v1) = (v1,v0)
 A directed graph is one in which each edge is a
directed pair of vertices, <v0, v1> != <v1,v0>
tail head

7
Examples for Graph
0 0 0

1 2 1 2
1
3
3 4 5 6
G1 2
G2
complete graph incomplete graph G3
V(G1)={0,1,2,3} E(G1)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}
V(G2)={0,1,2,3,4,5,6} E(G2)={(0,1),(0,2),(1,3),(1,4),(2,5),(2,6)}
V(G3)={0,1,2} E(G3)={<0,1>,<1,0>,<1,2>}
complete undirected graph: n(n-1)/2 edges
complete directed graph: n(n-1) edges
8
Complete Graph
Definition:
 A complete graph is a graph that has the
maximum number of edges
– for undirected graph with n vertices, the maximum
number of edges is n(n-1)/2
– for directed graph with n vertices, the maximum
number of edges is n(n-1)
– example: G1 is a complete graph

9
Adjacent and Incident
 If (v0, v1) is an edge in an undirected graph,
– v0 and v1 are adjacent
– The edge (v0, v1) is incident on vertices v0 and v1
 If <v0, v1> is an edge in a directed graph
– v0 is adjacent to v1, and v1 is adjacent from v0
– The edge <v0, v1> is incident on v0 and v1

10
Figure :Example of a graph with feedback loops and a multigraph

0 2 1 3

1 2
self edge multigraph:
(a) (b) multiple occurrences
of the same edge

Figure 6.3
11
Subgraph and Path
 A subgraph of G is a graph G’ such that V(G’)
is a subset of V(G) and E(G’) is a subset of E(G)
 A path from vertex vp to vertex vq in a graph G,
is a sequence of vertices, vp, vi1, vi2, ..., vin, vq,
such that (vp, vi1), (vi1, vi2), ..., (vin, vq) are edges
in an undirected graph
 The length of a path is the number of edges on
it

12
Figure : subgraphs of G1 and G3
0 0 0 1 2 0

1 2 1 2 3 1 2
3
3
G1 (i) (ii) (iii) (iv)
(a) Some of the subgraph of G1

0 0 0 0
0
1 1 1
1
2 2
(i) (ii) (iii) (iv)
2 (b) Some of the subgraph of G3

G3 13
Simple Path and Style
 A simple path is a path in which all vertices,
except possibly the first and the last, are distinct
 A cycle is a simple path in which the first and
the last vertices are the same
 In an undirected graph G, two vertices, v0 and v1,
are connected if there is a path in G from v0 to v1
 An undirected graph is connected if, for every
pair of distinct vertices vi, vj, there is a path
from vi to vj
14
connected

0 0

1 2 1 2
3
3 4 5 6
G1
G2
tree (acyclic graph)

15
Connected Component
 A connected component of an undirected graph
is a maximal connected subgraph.
 A tree is a graph that is connected and acyclic.
 A directed graph is strongly connected if there
is a directed path from vi to vj and also
from vj to vi.
 A strongly connected component is a maximal
subgraph that is strongly connected.
16
*Figure: A graph with two connected components
connected component (maximal connected subgraph)

H1 0 H2 4

2 1 5

3 6

G4 (not connected)
17
*Figure : Strongly connected components of G3
strongly connected component
not strongly connected (maximal strongly connected subgraph)

0
0 2

1
2
G3

18
Degree
 The degree of a vertex is the number of edges
incident to that vertex
 For directed graph,
– the in-degree of a vertex v is the number of edges
that have v as the head
– the out-degree of a vertex v is the number of edges
that have v as the tail
– if di is the degree of a vertex i in a graph G with n
vertices and e edges, the number of edges is
n 1

e  ( di ) / 2
0

19
undirected graph
degree
3 0
0 2
1 2
3 1 2 3 3 3
3 4 5 6
3
G13 1 1 G2 1 1
0 in:1, out: 1
directed graph
in-degree
out-degree 1 in: 1, out: 2

2 in: 1, out: 0
G3 20
ADT for Graph
structure Graph is
objects: a nonempty set of vertices and a set of undirected edges, where each
edge is a pair of vertices
functions: for all graph  Graph, v, v1 and v2  Vertices
Graph Create()::=return an empty graph
Graph InsertVertex(graph, v)::= return a graph with v inserted. v has no
incident edge.
Graph InsertEdge(graph, v1,v2)::= return a graph with new edge
between v1 and v2
Graph DeleteVertex(graph, v)::= return a graph in which v and all edges
incident to it are removed
Graph DeleteEdge(graph, v1, v2)::=return a graph in which the edge (v1, v2)
is removed
Boolean IsEmpty(graph)::= if (graph==empty graph) return TRUE
else return FALSE
List Adjacent(graph,v)::= return a list of all vertices that are adjacent to v

21
Graph Representations
 Adjacency Matrix
 Adjacency Lists
 Adjacency Multilists

22
Adjacency Matrix
 Let G=(V,E) be a graph with n vertices.
 The adjacency matrix of G is a two-dimensional
n by n array, say adj_mat
 If the edge (vi, vj) is in E(G), adj_mat[i][j]=1
 If there is no such edge in E(G), adj_mat[i][j]=0
 The adjacency matrix for an undirected graph is
symmetric; the adjacency matrix for a digraph
need not be symmetric
23
Examples for Adjacency Matrix
0 0 4
0
2 1 5
1 2
3 6
3 1
0 1 1 1 0 1 0
1 0 1 1    7
  1 0 1 
2 0 1 1 0 0 0 0 0
1 1 0 1 0 0 0 1
   0 0 1 0 0 0 0
1 1 1 0
1 0 0 1 0 0 0 0
G2  
G1
0 1 1 0 0 0 0 0
0 0 0 0 0 1 0 0
 
0 0 0 0 1 0 1 0
symmetric 0 0 0 0 0 1 0 1
 
undirected: n2/2 0 0 0 0 0 0 1 0
directed: n2
G4 24
Merits of Adjacency Matrix
 From the adjacency matrix, to determine the
connection of vertices is easy n 1

 The degree of a vertex is  adj _ mat[i][ j ]


j 0

 For a digraph, the row sum is the out_degree,


while the column sum is the in_degree
n 1 n 1
ind (vi )   A[ j , i ] outd (vi )   A[i , j ]
j 0 j 0

25
Data Structures for Adjacency Lists
Each row in adjacency matrix is represented as an adjacency list.

#define MAX_VERTICES 50
typedef struct node *node_pointer;
typedef struct node {
int vertex;
struct node *link;
};
node_pointer graph[MAX_VERTICES];
int n=0; /* vertices currently in use */
26
0 0 4
2 1 5
1 2 3 6
3 7
0 1 2 3 0 1 2
1 0 2 3 1 0 3
2 0 1 3 2 0 3
3 0 1 2 3 1 2
G1 0 4 5
5 4 6
0 1 6 5 7
1 0 2 1
7 6
2
G3 G4
2
27
An undirected graph with n vertices and e edges ==> n head nodes and 2e list nodes
Interesting Operations
degree of a vertex in an undirected graph
–# of nodes in adjacency list
# of edges in a graph
–determined in O(n+e)
out-degree of a vertex in a directed graph
–# of nodes in its adjacency list
in-degree of a vertex in a directed graph
–traverse the whole data structure

28
Compact Representation
0 4
node[0] … node[n-1]: starting point for vertices
2 1 5 node[n]: n+2e+1
3 6 node[n+1] … node[n+2e]: head node of edge

7
[0] 9 [8] 23 [16] 2
[1] 11 0 [9] 1 4 [17] 5
[2] 13 [10] 2 5 [18] 4
[3] 15 1 [11] 0 [19] 6
[4] 17 [12] 3 6 [20] 5
[5] 18 2 [13] 0 [21] 7
[6] 20 [14] 3 7 [22] 6
[7] 22 3 [15] 1
29
Figure : Inverse adjacency list for G3

0
0  1 NULL

1 1  0 NULL

2  1 NULL
2

Determine in-degree of a vertex in a fast way.

30
Figure : Alternate node structure for adjacency lists

tail head column link for head row link for tail

31
Figure : Orthogonal representation for graph G3

0 1 2

0 0 1 NULL NULL

1 1 0 NULL 1 2 NULL NULL

0
2 NULL
0 1 0
 
 1 0 1 
0 0 0
1

2
32
Figure:Alternate order adjacency list for G1
Order is of no significance.
headnodes vertax link

0  3  1  2 NULL

1  2  0  3 NULL

2  3  0  1 NULL

3  2  1  0 NULL

1 2
3 33
Adjacency Multilists
An edge in an undirected graph is
represented by two nodes in adjacency list
representation.
Adjacency Multilists
–lists in which nodes may be shared among
several lists.
(an edge is shared by two different paths)

marked vertex1 vertex2 path1 path2

34
Example for Adjacency Multlists
Lists: vertex 0: M1->M2->M3, vertex 1: M1->M4->M5
vertex 2: M2->M4->M6, vertex 3: M3->M5->M6
(1,0)
0 N1 0 1 N2 N4 edge (0,1)
1 (2,0)
2 N2 0 2 N3 N4 edge (0,2)
(3,0)
3 N3 0 3 N5 edge (0,3)
(2,1)

0 N4 1 2 N5 N6 edge (1,2)
(3,1)
N5 1 3 N6 edge (1,3)
1 2 (3,2)
N6 2 3 edge (2,3)
3
six edges
35
Adjacency Multilists

typedef struct edge *edge_pointer;


typedef struct edge {
short int marked;
int vertex1, vertex2;
edge_pointer path1, path2;
};
edge_pointer graph[MAX_VERTICES];

marked vertex1 vertex2 path1 path2

36
Directed and Weighted Graphs
• Undirected graphs - edges don’t have a
direction.
– Can travel in any direction.
• Directed graphs – can traverse in only the
indicated direction.
• Weight – number that represents physical
distance or time or cost between two vertices.
Some Graph Operations
 Traversal
Given G=(V,E) and vertex v, find all wV,
such that w connects v.
– Depth First Search (DFS)
preorder tree traversal
– Breadth First Search (BFS)
level order tree traversal
 Connected Components
 Spanning Trees
Search
• Fundamental operation, to find out which vertices
can be reached from a specified vertex.
• An algorithm that provides a systematic way to start
at a specified vertex and then move along edges to
other vertex.
• Every vertex that is connected to this vertex has to
be visited at the end.
• Two common approaches :
– depth-first (DFS) and
– breadth-first search (BFS).
DFS
• Can be implemented with a stack to
remember where it should go when it reaches
a dead end.
• DFS goes far way from the starting point as
quickly as possible and returns only if it
reaches a dead end.
• Used in simulations of games
DFS
There are 3 rules
-- start with a vertex
R1: a. go to any vertex adjacent to it
that hasn’t yet been visited .
b. push it on a stack and mark it.
R2 : if can’t follow R1, then possible
pop up a vertex off the stack.
R3 : if can’t follow R1 and R2, you’re
done
Steps:
-- start with a vertex
DFS
-- visit it
-- push it on a stack and mark it
-- go to any vertex adjacent to it
that hasn’t yet been visited
-- if there are no unvisited nodes,
pop a vertex off the stack till
you come across a vertex that
has unvisited adjacent vertices
Breadth-First Search BFS

• Implemented with a queue.


• Stays as close as possible to the starting point.
• Visits all the vertices adjacent to the starting
vertex
Steps:
-- start with visiting a starting
vertex BFS
-- visit the next unvisited
adjacent vertex, mark it and
insert it into the queue.
-- if there are no unvisited
vertices, remove a vertex
from the queue and make it
the current vertex.
-- continue until you reach the
end.
*Figure :Graph G and its adjacency lists
depth first search: v0, v1, v3, v7, v4, v5, v2, v6

breadth first search: v0, v1, v2, v3, v4, v5, v6, v7
Depth First Search
#define FALSE 0
#define TRUE 1
short int visited[MAX_VERTICES];
void dfs(int v)
{
node_pointer w;
visited[v]= TRUE;
printf(“%5d”, v);
for (w=graph[v]; w; w=w->link)
if (!visited[w->vertex])
dfs(w->vertex); Data structure
} adjacency list: O(e)
adjacency matrix: O(n2)
Breadth First Search
typedef struct queue *queue_pointer;
typedef struct queue {
int vertex;
queue_pointer link;
};
void addq(queue_pointer *,
queue_pointer *, int);
int deleteq(queue_pointer *);
Breadth First Search (Continued)
void bfs(int v)
{
node_pointer w;
queue_pointer front, rear;
front = rear = NULL;
adjacency list: O(e)
printf(“%5d”, v); adjacency matrix: O(n2)
visited[v] = TRUE;
addq(&front, &rear, v);
while (front) {
v= deleteq(&front);
for (w=graph[v]; w; w=w->link)
if (!visited[w->vertex]) {
printf(“%5d”, w->vertex);
addq(&front, &rear, w->vertex);
visited[w->vertex] = TRUE;
}
}
}
Connected Components
void connected(void)
{
for (i=0; i<n; i++) {
if (!visited[i]) {
dfs(i);
printf(“\n”);
}
adjacency list: O(n+e)
} adjacency matrix: O(n2)
}
Spanning Trees
 When graph G is connected, a depth first or
breadth first search starting at any vertex will
visit all vertices in G
 A spanning tree is any tree that consists solely
of edges in G and that includes all the vertices
 E(G): T (tree edges) + N (nontree edges)
where T: set of edges used during search
N: set of remaining edges
Examples of Spanning Tree

0 0 0 0

1 2 1 2 1 2 1 2
3 3 3 3

G1 Possible spanning trees

52
Spanning Trees
 Either dfs or bfs can be used to create a
spanning tree
– When dfs is used, the resulting spanning tree is
known as a depth first spanning tree
– When bfs is used, the resulting spanning tree is
known as a breadth first spanning tree
 While adding a nontree edge into any spanning
tree, this will create a cycle
DFS VS BFS Spanning Tree
0 0 0

1 2 1 2 1 2

3 4 5 6 3 4 5 6 3 4 5 6

7 7 nontree edge 7
cycle
DFS Spanning BFS Spanning
Minimum Spanning Tree(MST)
MST
• DSF application -> display visited edges
• Example Application
– Reduce paths and pins in VLSI (Chip) design and
fabrication
A spanning tree is a minimal subgraph, G’, of G
such that V(G’)=V(G) and G’ is connected.

Any connected graph with n vertices must have


at least n-1 edges.

A biconnected graph is a connected graph that has


no articulation points. 0

1 2
biconnected graph
3 4 5 6

7
0 8 9

1 7

2 3 5 connected graph

4 6
two connected components one connected graph

0 8 9 0 8 9

7 1 7
1

2 3 5 2 3 5

4 6 4 6
biconnected component: a maximal connected subgraph H
(no subgraph that is both biconnected and properly contains H)

0 8 9

0 8 9
1 7 7

1 7
1 7

2 3 5
2 3 3 5 5

4 6
4 6

biconnected components
Find biconnected component of a connected undirected graph
by depth first spanning tree
nontree
0 edge
3 (back edge)
4 0 9 8 9 8 1 5
nontree 4 5
7 7 edge
3 1
0 5 (back edge) 2 2 6 6
2 2 3 5 3
1 7 7
dfn
depth 8 9
4 6
first 4 0 9 8
1 6
number Why is cross edge impossible?
(a) depth first spanning tree (b)
If u is an ancestor of v then dfn(u) < dfn(v).
*Figure : dfn and low values for dfs spanning tree with root =3

Vertax 0 1 2 3 4 5 6 7 8 9
dfn 4 3 2 0 1 5 6 7 9 8
low 4 0 0 0 0 5 5 5 9 8
0
3 *The root of a depth first spanning
1 5 tree is an articulation point iff
4 5 it has at least two children.

2 2 6 6 *Any other vertex u is an articulation


3 point iff it has at least one child w
1 7 7 such that we cannot reach an ancestor
8 9of u using a path that consists of
4 0 9 8
(1) only w (2) descendants of w (3)
low(u)=min{dfn(u), single back edge.
min{low(w)|w is a child of u},
min{dfn(w)|(u,w) is a back edge}

u: articulation point
low(child)  dfn(u)
vertex dfn low child low_child low:dfn
0 4 4 (4,n,n) null null null:4
1 3 0 (3,4,0) 0 4 43 
2 2 0 (2,0,n) 1 0 0<2
3 0 0 (0,0,n) 4,5 0,5 0,5  0 
4 1 0 (1,0,n) 2 0 0<1
5 5 5 (5,5,n) 6 5 55 
6 6 5 (6,5,n) 7 5 5<6
7 7 5 (7,8,5) 8,9 9,8 9,8  7 
8 9 9 (9,n,n) null null null, 9
9 8 8 (8,n,n) null null null, 8
3
1 5
4 5

2 2 6 6
3
1 7 7
8 9
4 0 9 8
*Program : Initializaiton of dfn

void init(void)
{
int i;
for (i = 0; i < n; i++) {
visited[i] = FALSE;
dfn[i] = low[i] = -1;
}
num = 0;
}
*Program : Determining dfn and low
void dfnlow(int u, int v)
{ Initial call: dfn(x,-1)
/* compute dfn and low while performing a dfs search
beginning at vertex u, v is the parent of u (if any) */
node_pointer ptr;
int w;
dfn[u] = low[u] = num++; low[u]=min{dfn(u), …}
for (ptr = graph[u]; ptr; ptr = ptr ->link) {
w = ptr ->vertex;
v
v if (dfn[w] < 0) { /*w is an unvisited vertex */
dfnlow(w, u);
u low[u] = MIN2(low[u], low[w]);
u
} low[u]=min{…, min{low(w)|w is a child of u}, …}
w else if (w != v)
O X low[u] =MIN2(low[u], dfn[w] );
}
}
*Program : Biconnected components of a graph

void bicon(int u, int v)


{
/* compute dfn and low, and output the edges of G by their
biconnected components , v is the parent ( if any) of the u
(if any) in the resulting spanning tree. It is assumed that all
entries of dfn[ ] have been initialized to -1, num has been
initialized to 0, and the stack has been set to empty */
node_pointer ptr;
int w, x, y;
low[u]=min{dfn(u), …}
dfn[u] = low[u] = num ++;
for (ptr = graph[u]; ptr; ptr = ptr->link) {
w = ptr ->vertex;
if ( v != w && dfn[w] < dfn[u] )
add(&top, u, w); /* add edge to stack */
if(dfn[w] < 0) {/* w has not been visited */
low[u]=min{…, min{low(w)|w is a child of u}, …}
bicon(w, u);
low[u] = MIN2(low[u], low[w]);
if (low[w] >= dfn[u] ){ articulation point
printf(“New biconnected component: “);
do { /* delete edge from stack */
delete(&top, &x, &y);
printf(“ <%d, %d>” , x, y);
} while (!(( x = = u) && (y = = w)));
printf(“\n”);
}
}
else if (w != v) low[u] = MIN2(low[u], dfn[w]);
}
}
low[u]=min{…, …, min{dfn(w)|(u,w) is a back edge}}
Minimum Cost Spanning Tree
 The cost of a spanning tree of a weighted
undirected graph is the sum of the costs of the
edges in the spanning tree
 A minimum cost spanning tree is a spanning
tree of least cost
 Three different algorithms can be used
– Kruskal
Select n-1 edges from a weighted graph
– Prim
of n vertices with minimum cost.
– Sollin
Greedy Strategy
 An optimal solution is constructed in stages
 At each stage, the best decision is made at this
time
 Since this decision cannot be changed later,
we make sure that the decision will result in a
feasible solution
 Typically, the selection of an item at each
stage is based on a least cost or a highest profit
criterion
Kruskal’s Idea
 Build a minimum cost spanning tree T by
adding edges to T one at a time
 Select the edges for inclusion in T in
nondecreasing order of the cost
 An edge is added to T if it does not form a
cycle
 Since G is connected and has n > 0 vertices,
exactly n-1 edges will be selected
Examples for Kruskal’s Algorithm
0 10 5

2 12 3

1 14 6 0 0 0
28
1 16 2 10 1 1 10 1
14 16
3 18 6 5 6 2 5 6 2 5 6 2
24
25
3 22 4 18 12 4 4
4
4 24 6 22 3 3 3

4 25 5

28
6/9
0 10 5

2 12 3

1 14 6

1 16 2 0 0 0
10 1 10 1 10 1
3 18 6
14 14 16

3 22 4 5 6 2 5 6 2 5 6 2

12 12 12
4 24 6 4 4 4
3 3 3
4 25 5

0 28 1 + 3 6
72
cycle
0 10 5

2 12 3

1 14 6
0 0
1 16 2
10 1 10 1
3 18 6 14 16 14 16

5 6 2 5 6 2
3 22 4
25
12 12
4 4
4 24 6 22
22 + 4 6 3
3
4 25 5 cycle
cost = 10 +25+22+12+16+14

0 28 1
Kruskal’s Algorithm
T= {};
while (T contains less than n-1 edges
&& E is not empty) {
choose a least cost edge (v,w) from E;
min heap construction time O(e)
delete (v,w) from E;
choose and delete O(log e)
if ((v,w) does not create a cycle in T)
add (v,w) to T
find find & union O(log e)
else discard (v,w);
} {0,5}, {1,2,3,6}, {4} + edge(3,6) X + edge(3,4) --> {0,5},{1,2,3,4,6}
if (T contains fewer than n-1 edges)
printf(“No spanning tree\n”);

O(e log e)
Prim’s Algorithm
(tree all the time vs. forest)
T={};
TV={0};
while (T contains fewer than n-1 edges)
{
let (u,v) be a least cost edge such
that u  TV and v  TV
if (there is no such edge ) break;
add v to TV;
add (u,v) to T;
}
if (T contains fewer than n-1 edges)
printf(“No spanning tree\n”);
Examples for Prim’s Algorithm
0
28
10 1
14 16

5 6 2
24
25
0 18 12 0 0
4
10 1 22 3 1 10 1
10

5 6 2 5 6 2 5 6 2
25 25
4 4 4
3 3 22 3
0
28
10 1
14 16

5 6 2
24
25
18 12
4
22 3
0 0 0
10 1 10 1 10 1
16 14 16

5 6 2 5 6 2 5 6 2
25 25 25
12 12 12
4 4 4
22 3 22 3 22 3
Spanning Tree Applications
•Computer Network Routing Protocol
•Cluster Analysis
•Civil Network Planning
Minimum Spanning tree Applications
•To find paths in the map
•To design networks like telecommunication networks, water
supply networks, and electrical grids.

78

You might also like