CS 131 LECTURE 10 - GRAPHS


UNDIRECTED GRAPHS

Terminology:
Important Point:


EXAMPLES OF UNDIRECTED GRAPHS

Disconnected Graph Diagram

Example 1: A Disconnected Graph

Connected Graph with Cycles Diagram

Example 2: A Connected Graph With Cycles

Undirected Tree Diagram

Example 3: An Undirected Tree
ADJACENCY MATRIX REPRESENTATION

Graph Package Specification
GENERIC
  TYPE Vertices IS (<>);
PACKAGE Graph_Package IS
  TYPE Graphs IS PRIVATE;
  PROCEDURE Add_Edge(Graph: IN OUT Graphs;
    Left,Right: IN Vertices);
  FUNCTION Connected(Graph: Graphs;
    Left,Right: Vertices) RETURN Boolean;
PRIVATE
  TYPE Graphs IS ARRAY(Vertices,Vertices)
    OF Boolean;
END Graph_Package;
Adjacency Matrix For Example 3:

Adjacency Matrix Diagram for Example 3


ADJACENCY MATRIX IMPLEMENTATION

Graph Package Body
PACKAGE BODY Graph_Package IS
  Marked: ARRAY(Vertices) OF Boolean;
  FUNCTION Adjacent(Graph: Graphs;
    Left,Right: Vertices) RETURN Boolean IS
  BEGIN
    RETURN Graph(Left,Right);
  END Adjacent;
  PROCEDURE Add_Edge(Graph: IN OUT Graphs;
    Left,Right: IN Vertices) IS
  BEGIN
    Graph(Left,Right) := True;
    Graph(Right,Left) := True;
  END Add_Edge;
  PROCEDURE Search(Graph: IN Graphs;
    Last,This: IN Vertices) IS SEPARATE;
  FUNCTION Connected(Graph: Graphs;
    Left,Right: Vertices) RETURN Boolean IS
  BEGIN
    Marked := (OTHERS => False);
    Search(Graph,Left,Left);
    RETURN Marked(Right) = True;
  END Connected;
END Graph_Package;
Important Point:


ADJACENCY LIST REPRESENTATION

Graph Package Specification
GENERIC
  -- Same As Adjacency Matrix
PRIVATE
  TYPE Nodes;
  TYPE Lists IS ACCESS Nodes;
  TYPE Nodes IS
    RECORD
      Vertex: Vertices;
      Next: Lists;
    END RECORD;
  TYPE Graphs IS ARRAY(Vertices)
    OF Lists;
END Graph_Package;
Adjacency List For Example 3:

Adjacency List Diagram for Example 3


ADJACENCY LIST IMPLEMENTATION

Graph Package Body
PACKAGE BODY Graph_Package IS
  Marked: ARRAY(Vertices) OF Boolean;
  FUNCTION Adjacent(Graph: Graphs;
    Left,Right: Vertices) RETURN Boolean IS
    Pointer: Lists;
    Edge: Boolean;
  BEGIN
    Edge := False;
    Pointer := Graph(Left);
    WHILE Pointer /= NULL AND NOT Edge LOOP
      Edge := Pointer.Vertex = Right;
      Pointer := Pointer.Next;
    END LOOP;
    RETURN Edge;
  END Adjacent;
  PROCEDURE Add_Edge(Graph: IN OUT Graphs;
    Left,Right: IN Vertices) IS
    Edge: Lists;
  BEGIN
    Edge := NEW Nodes;
    Edge.Vertex := Right;
    Edge.Next := Graph(Left);
    Graph(Left) := Edge;
    -- Make Reverse Connection
  END Add_Edge;
END Graph_Package;
 


DEPTH FIRST SEARCH

Search Procedure
SEPARATE (Graph_Package)
PROCEDURE Search(Graph: IN Graphs; Last,This: IN Vertices) IS
BEGIN
  IF NOT Marked(This) THEN
    Marked(This) := True;
    FOR Next IN Vertices LOOP
      IF Last /= Next AND THEN
        Adjacent(Graph,This,Next) THEN
        Search(Graph,This,Next);
      END IF;
    END LOOP;
  END IF;
END Search;
Important Points:


BREADTH FIRST SEARCH

Search Procedure
WITH FIFO_Queue_Package;
SEPARATE (Graph_Package)
PROCEDURE Search(Graph: IN Graphs;
  Last,This: IN Vertices) IS
  PACKAGE VQ IS NEW
    FIFO_Queue_Package(Vertices);
  Queue: VQ.Queues;
  Previous,Current,Next: Vertices;
BEGIN
  Previous := Last; Current := This;
  Marked(Current) := True;
  VQ.Enqueue(Queue,Previous);
  VQ.Enqueue(Queue,Current);
  WHILE NOT VQ.Empty(Queue) LOOP
    VQ.Dequeue(Queue,Previous);
    VQ.Dequeue(Queue,Current);
    FOR Next IN Vertices LOOP
      IF Previous /= Next AND THEN
        Adjacent(Graph,Current,Next) AND
        THEN NOT Marked(Next) THEN
        VQ.Enqueue(Queue,Current);
        VQ.Enqueue(Queue,Next);
        Marked(Next) := True;
      END IF;
    END LOOP;
  END LOOP;
END Search;


DIRECTED GRAPHS

Terminology:

Directed Graph Diagram

Example 4: A Directed Graph
DIRECTED GRAPH REPRESENTATIONS

Adjacency Matrix Representation

Adjacency Matrix Diagram

Adjacency List Representation

Adjacency List Diagram


TRANSITIVE CLOSURE AND TOPOLOGICAL ORDER

Transitive Closure For Example 4

Transitive Closure Diagram for Example 4

Topological Orders For Example 4

  1. 1 2 3 4 5 6 7 8
  2. 1 2 3 4 5 7 6 8
  3. 1 3 2 4 5 6 7 8
  4. 1 3 2 4 5 7 6 8
  5. 3 1 2 4 5 6 7 8
  6. 3 1 2 4 5 7 6 8
Important Point:


/ Top of Page /