graphs - math.uic.edujan/mcs360f17/graphs.pdf · graphs 1 graphs directed and undirected graphs...

37
Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency list adjacency matrix 3 Graph Implementations adjacency matrix adjacency list MCS 360 Lecture 38 Introduction to Data Structures Jan Verschelde, 27 November 2017 Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 1 / 37

Upload: others

Post on 09-Oct-2020

26 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs1 Graphs

directed and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

MCS 360 Lecture 38Introduction to Data Structures

Jan Verschelde, 27 November 2017

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 1 / 37

Page 2: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

graphs, terminology and definition

A node in a graph is called a vertex.A connection between two vertices is an edge.

A graph G is defined by a tuple (V ,E):V is the set of vertices, andE is the set of edges.

An example:����A����B

����C����D

@@@ �A

A

V = {A,B,C,D}

E = {(A,B), (A,C), (A,D), (C,D), (D,D)}

Two vertices are adjacent if there is an edge between them.A path is a sequence of successively adjacent vertices.For example, a path from B to D is B,A,D.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 2 / 37

Page 3: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 3 / 37

Page 4: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

directed and undirected graphsIn an undirected graph (which is the default), the edge (A,B) means:there is an edge from A to B and there is an edge from B to A.����A����B

����C����D

@@@ �A

A

V = {A,B,C,D}

E = {(A,B), (A,C), (A,D), (C,D), (D,D)}

����A����B

����C����D

-�

6@@@R

��AA�

V = {A,B,C,D}

E = {(A,B), (B,A), (C,A), (A,D), (D,C), (D,D)}

In a directed graph or digraph, (A,B) means there is an edge from Ato B and (B,A) means there is an edge from B to A.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 4 / 37

Page 5: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 5 / 37

Page 6: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

weighted graphs

In an weighted graph, a value (a weight) is associated to every edge.����A����B

����C����D

5

8@@@

3

7

�AA4

����A����B

����C����D

-5�

668@@@R

3

�7

�AA�

�AA4

Edges in a weighted graphs are triplets (u, v ,w),with w the weight of the edge which connects u to v .

A cycle is a path where the first vertex equals the last one.For example: A, D, C, A is a cycle.

A graph without cycles can be viewed as a tree.

The degree of a vertex is the number of edges that contain that vertex.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 6 / 37

Page 7: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 7 / 37

Page 8: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency matricesFor a graph G = (V ,E), the adjacency matrix M

has as many rows and columns as the number of vertices in V ;for all vi , vj ∈ V : if (vi , vj) 6∈ E : Mi,j = 0;for all vi , vj ∈ V : if (vi , vj) ∈ E : Mi,j = 1.����A����B

����C����D

@@@ �A

A

A B C D0 1 1 11 0 0 01 0 0 11 0 1 1

ABCD����A

����B

����C����D

-�

6@@@R

��AA�

A B C D0 1 0 11 0 0 01 0 0 00 0 1 1

ABCD

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 8 / 37

Page 9: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency matrices for weighted graphsFor a weighted graph G = (V ,E), the adjacency matrix M

has as many rows and columns as the number of vertices in V ;for all vi , vj ∈ V : if (vi , vj) 6∈ E : Mi,j = 0;for all vi , vj ∈ V : if (vi , vj) ∈ E : Mi,j = w , w is the weight of (vi , vj).����A����B

����C����D

5

8@@@

3

7

�AA4

A B C D0 5 8 35 0 0 08 0 0 73 0 7 4

ABCD����A

����B

����C����D

-5�

668@@@R

3

�7

�AA4

A B C D0 5 0 36 0 0 08 0 0 00 0 7 4

ABCD

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 9 / 37

Page 10: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 10 / 37

Page 11: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

graph representations

A graph G = (V ,E) can be one of the four types:1 undirected: the edge (u, v) goes from u to v and from v to u;2 directed: the edge (u, v) goes only from u to v , not from v to u;3 weighted undirected: every edge is a triplet (u, v ,w),

w is the weight and (u, v) goes from u to v and from v to u;4 weighted directed: every edge is a triplet (u, v ,w),

w is the weight and (u, v) goes only from u to v , not from v to u.

A graph G = (V ,E) is a data structure:The set of vertices is finite: V = {v0, v1, . . . , vn−1}.The vertices store values, the data are stored in V .The set of edges if finite: E = {e0,e1, . . . ,em−1}.In a weighted graph, the edges have weights.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 11 / 37

Page 12: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

operations on graphs

On a graph G = (V ,E), we want the following operations:

Get the number |V | of vertices in V .Get the number |E | of edges in E .For an iterator i or index i , get the i-th vertex in V .For an iterator i or index i , get the i-th edge in E .Given u, v ∈ V , is (u, v) ∈ E?

Add a vertex to V .Given u, v ∈ V , add (u, v) to E .

For a weighted graph, an additional operation is the following:Given u, v ∈ V , get the weight of the edge from u to v .

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 12 / 37

Page 13: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

abstract data typeV = {v0, v1, . . . , vn−1} is represented by the sequence 0,1, . . . ,n − 1.

abstract <typename T> graph;/* A graph has vertices 0, 1, .. to store data of

type T and edges which connect the vertices. */

abstract int number_of_vertices ( graph g );postcondition: number_of_vertices(g) = |vertices of g|;

abstract int number_of_edges ( graph g );postcondition: number_of_edges(g) = |edges of g|;

abstract T data_element ( graph g, size_t i );precondition: 0 <= i < number_of_vertices(g);postcondition: data_element(g, i) is the data at i;

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 13 / 37

Page 14: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

abstract data type continued

abstract (i, j) get_edge ( graph g, size_t k );precondition: 0 <= k < number_of_edges(g);postcondition: get_edge(g, k) is the k-th edge (i, j);

abstract bool is_edge ( graph g, size_t i, size_t j );postcondition: is_edge(g, i, j) is true if (i, j) isan edge of g, otherwise is_edge(g, i, j) is false;

abstract void add_vertex ( graph g );postcondition: for the graph g on input, there isa vertex with index == number_of_vertices(g);

abstract void add_edge ( graph g, size_t i, size_t j );precondition: 0 <= i, j < number_of_vertices(g);postcondition: is_edge(g, i, j) is true;

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 14 / 37

Page 15: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

abstract data type for weighted graphThe ADT for a weighted graph starts differently:

abstract <typename T> weighted graph;/* A weighted graph has vertices 0, 1, .. to store

data of type T and edges which connect vertices.Every edge has a weight of type double. */

and there is an additional operation:

abstract double get_weight( graph g, size t i, size_t j );

precondition: 0 <= i, j < number_of_vertices(g)and is_edge(g, i, j) is true;

postcondition: get_weight(g, i, j) is the weightof the edge (i, j);

A more general ADT for a weighted graph would leavethe type of the weight as defined by a template.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 15 / 37

Page 16: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 16 / 37

Page 17: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency list representation

An adjacency list representationuses an array of lists, one list per vertex;the list i stores the vertices adjacent to vertex i .

An example:����0 ����1����2 ����3@@@ �A

A

0

1

2

3

s- 1s- 2s- 3s-s- 0s-s- 0s- 3s-s- 0s- 2s- 3s-The vertices in the list need not to be ordered.

The number of elements in list i equals the degree of vertex i .

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 17 / 37

Page 18: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency list representation for a directed graph

An adjacency list representationuses an array of lists, one list per vertex;the list i stores the vertices j for all edges (i , j).

An example:����0 ����1����2 ����3-�

6@@@R

��AA�

0

1

2

3

s- 1s- 3s-s- 0s-s- 0s-s- 2s- 3s-The vertices in the list need not to be ordered.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 18 / 37

Page 19: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency list representation for a weighted graph

An adjacency list representationuses an array of lists, one list per vertex;the list i stores the vertices adjacent to vertex i ;the weight of an edge is stored with the pointer to the next vertex.

An example:����0 ����1����2 ����35

8@@@

3

7

�AA4

0

1

2

3

s -5 1s -8 2s -3 3s -s -5 0s -s -8 0s -7 3s -s -3 0s -7 2s -4 3s -The vertices in the list need not to be ordered.Exercise: draw the adjacency list for a weighted digraph.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 19 / 37

Page 20: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 20 / 37

Page 21: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency matrix representation

An adjacency matrix representationuses an array of arrays, one array per vertex;the i-th array stores a boolean at its j-th position:

I the j-th boolean in array i is false if no edge from i to j ;I the j-th boolean in array i is true if an edge from i to j .

An example:����0 ����1����2 ����3@@@ �A

A

0

1

2

3

s- 0 1 1 1s- 1 0 0 0s- 1 0 0 1s- 1 0 1 1

Exercise: draw the adjacency matrix for a digraph.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 21 / 37

Page 22: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

adjacency matrix representation for a weighted graph

An adjacency matrix representationuses an array of arrays, one array per vertex;the i-th array stores the weight at its j-th position:

I the j-th number in array i is zero if no edge from i to j ;I the j-th number in array i is the weight if an edge from i to j .

An example:����0 ����1����2 ����35

8@@@

3

7

�AA4

0

1

2

3

s- 0 5 8 3s- 5 0 0 0s- 8 0 0 7s- 3 0 7 4

Exercise: draw the adjacency matrix for a weighted digraph.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 22 / 37

Page 23: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 23 / 37

Page 24: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

graph as adjacency matrix

For the array of arrays, we use the STL vector class.

An adjacency matrix is of type vector< vector<bool> >.

For a weighted graph, we use vector< vector<double> >.

We have four types:1 undirected, unweighted2 directed, unweighted3 undirected, weighted4 directed, weighted

We generate random matrices to test the data structures.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 24 / 37

Page 25: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

prototypes for directed, unweighted graphs

void allocate_boolean_matrix( vector< vector<bool> >& mat, size_t dim );

// Allocates space for an adjacency matrix// of dimension dim.

void random_directed_graph( vector< vector<bool> >& mat );

// Fills up the adjacency matrix for a random// directed graph.

void write_boolean_matrix( vector< vector<bool> >& mat );

// Writes the matrix to screen.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 25 / 37

Page 26: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

allocation of the matrix

void allocate_boolean_matrix( vector< vector<bool> >& mat, size_t dim )

{for(size_t i=0; i<dim; i++){

vector<bool> row;

for(size_t j=0; j<dim; j++)row.push_back(0);

mat.push_back(row);}

}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 26 / 37

Page 27: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

generating a random graph

void random_directed_graph( vector< vector<bool> >& mat )

{const size_t dim = mat.size();

for(size_t i=0; i<dim; i++)for(size_t j=0; j<dim; j++)

mat[i][j] = (rand() % 2);}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 27 / 37

Page 28: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

writing the matrix

void write_boolean_matrix( vector< vector<bool> >& mat )

{const size_t dim = mat.size();

for(size_t i=0; i<dim; i++){

for(size_t j=0; j<dim; j++)cout << " " << mat[i][j];

cout << endl;}

}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 28 / 37

Page 29: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

a random symmetric matrixIn a symmetrix matrix, the lower half equals the upper half.

void random_undirected_graph( vector< vector<bool> >& mat )

{const size_t dim = mat.size();

for(size_t i=0; i<dim; i++){

for(size_t j=0; j<i; j++) // copy lower halfmat[i][j] = mat[j][i];

for(size_t j=i; j<dim; j++) // generate uppermat[i][j] = (rand() % 2);

}}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 29 / 37

Page 30: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

weights in the interval [0.1,9.9].

void random_directed_weighted_graph( vector< vector<double> >& mat )

{const size_t dim = mat.size();for(size_t i=0; i<dim; i++)

for(size_t j=0; j<dim; j++){

size_t rnd = rand() % 2; // edge or notif(rnd == 0)

mat[i][j] = 0.0; // no edge => 0 weightelse{

rnd = 1 + rand() % 99; // random weightmat[i][j] = ((double) rnd)/10.0;

}}

}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 30 / 37

Page 31: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

Graphs

1 Graphsdirected and undirected graphsweighted graphsadjacency matrices

2 Graph Representationsabstract data typeadjacency listadjacency matrix

3 Graph Implementationsadjacency matrixadjacency list

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 31 / 37

Page 32: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

graph as adjacency list

We use the STL vector and list classes.

The array of lists is then of type vector< list<size_t> >.

For a weighted graph,we use vector< list< pair<size_t, double> > >.

Memory allocation happens in two stages:1 The vector is allocated immediately after its declaration.2 Space in the list is allocated for each new edge.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 32 / 37

Page 33: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

prototypes for directed, unweighted graphs

void allocate_adjacency_list( vector< list<size_t> >& lst, size_t dim );

// Allocates space for an adjacency list// of dimension dim.

void random_directed_graph( vector< list<size_t> >& lst );

// Fills up the adjacency list for a random// directed graph.

void write_adjacency_list( vector< list<size_t> >& lst );

// Writes the adjacency list to screen.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 33 / 37

Page 34: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

allocating space

void allocate_adjacency_list( vector< list<size_t> >& lst, size_t dim )

{for(size_t i=0; i<dim; i++){

list<size_t> row;lst.push_back(row);

}}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 34 / 37

Page 35: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

generating a directed, unweighted graph

void random_directed_graph( vector< list<size_t> >& lst )

{const size_t dim = lst.size();

for(size_t i=0; i<dim; i++){

for(size_t j=0; j<dim; j++){

size_t rnd = rand() % 2;if(rnd != 0) lst[i].push_back(j);

}}

}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 35 / 37

Page 36: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

writing the adjacency list

void write_adjacency_list( vector< list<size_t> >& lst )

{const size_t dim = lst.size();

for(size_t i=0; i<dim; i++){

cout << i;

for(list<size_t>::const_iterator it=lst[i].begin();it != lst[i].end(); it++)

cout << " -> " << *it;

cout << endl;}

}

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 36 / 37

Page 37: Graphs - math.uic.edujan/mcs360f17/graphs.pdf · Graphs 1 Graphs directed and undirected graphs weighted graphs adjacency matrices 2 Graph Representations abstract data type adjacency

summary + exercises

Graphs representations are adjacency lists or adjacency matrices.

Exercises:1 For the Graph ADT, write a class definition where the private data

attribute is an adjacency matrix.2 Give the implementation of the class of the previous exercise.3 For the Graph ADT, write a class definition where the private data

attribute is an adjacency list.4 Give the implementation of the class of the previous exercise.

Introduction to Data Structures (MCS 360) Graphs L-38 27 November 2017 37 / 37