CSE 2320 Section 501 Fall 1998
Due: November 24, 1998, 5:30pm (November 25, 1998, 5:00pm for -10%)
For this program you will implement a graph cycle detector. The program
will input a directed graph and output all simple cycles (see p88),
if any, that exist in the graph. Specifically,
- Your program may use no global variables.
- Implement a graph data structure (either adjacency matrix or adjacency
list) to hold the directed graph. The graph must be allocated and deallocated
at runtime. Implement procedures for graph allocation, graph deallocation,
edge addition and edge lookup.
- Implement procedures for detecting (and outputting) cycles in a
given graph. A cycle should be output as a directed path starting from
the smallest vertex number, e.g., '1 -> 2 -> 3 -> 5 -> 1'. Cycles
should be output in non-decreasing order by their starting vertex, where
cycles beginning with the same vertex can be output in any order. If
the graph contains no cycles, then simply output 'No cycles'.
- The main part of your program will read in data from a file whose
name is given as the first argument to your executable. The first line
of the file contains the number of vertices (1-100) and edges (1-1000)
in the graph. The remaining lines define the edges in the graph in the
form 'e 5 3', which means there is a directed edge in the graph
from vertex 5 to vertex 3. Your main program should read in the graph
and then call your procedure to output any cycles. See files pgm4in
and pgm4out in the class directory on omega for an example.
Your output should match the format of the example output.
- Be sure to properly document your source code, as described in
Program 1. After ensuring that your program compiles and executes
correctly on the omega machine, run the program /public/cse/2320-501/handin4 to electronically hand in your source file.
All source code must be in one file (i.e., no separate .h and .c files).
Do not turn in a printout of your source code in class.