A printable PDF is available.

# Assignment 5 - Due Thursday, November 17

**Objective:** The objective of this assignment is for you to
gain experience working with the basic graph data
structure, including iterating through vertices and adjacencies. This
assignment is not as long or intricate as other full-credit
assignments, so take the time to experiment with the graph data
structure and get comfortable working with it. The time you
invest in this will pay off on the final assignment!

**Background:**
Courses in Computer Science depend heavily on prerequisites, and it is
common to represent prerequisites as a graph (like on the prerequisite
chart we publish on our department web page).
It is easy to create a graph of courses linked to prerequisites by scraping
data from the *UNCG Bulletin*, and you can use that as input to
construct a graph with an edge from a course to each of its
prerequisites. However, sometimes we might want to look at this graph
in the other way: For each course that acts as a prerequisite, what
courses depend on it? This is the *transpose* of the original
graph, or the graph with the same vertices and connections, but with
the direction of each edge reversed. Your goal for this assignment is to
write methods that will allow you to take a graph of
Computer Science courses and prerequisites, and print the transpose
graph. Samples of the output for both the original graph and the
transposed graph are given below.

**What To Do:** Start with the code in Bitbucket, as in previous
assignments: fork the "Assign5" repository, rename it to include
your username, grant read access to the class administrators, and then
use NetBeans on your computer to clone it so you can work with
it.

You are to write two methods (stubs are given in the provided code):

`printGraph()`

prints the graph in a readable form, as shown in the samples below. Note that the output is "nice" in the sense that each vertex is followed by an appropriate, grammatically correct phrase on the same line, depending on whether there are zero, one, or more adjacent vertices. Note also that the vertices are given in sorted order -- you actually get that "for free" if you change one data structure that is used in the Weiss graph implementation. These small touches matter!`getTransposedGraph()`

operates on a graph and returns a new graph that is the transpose of the original graph (which is not changed).

**Submission Instructions:** Using NetBeans, commit all changes
to your project and do a "push to
upstream" to put the most up-to-date files on the Bitbucket
server. Remember: Do *not* create a pull request --
I will clone your repository (if it exists
and you granted me access) at 12:30 on the due date, and will
assume that is your submission. If you intend to keep working on your
project and submit late, please let me know by email, and I will
ignore your repository until the late submission deadline.

**Original Graph Output:** This shows the output of the
`printGraph()`

method when called on the original graph (courses
with edges to their prerequisites).

CSC130 -- no edges out CSC230 -- edge out to: CSC130 CSC250 -- edge out to: CSC130 CSC261 -- edges out to: CSC230 CSC250 CSC312 -- edges out to: CSC230 CSC250 CSC330 -- edges out to: CSC230 CSC250 CSC339 -- edge out to: CSC330 CSC340 -- edge out to: CSC330 CSC350 -- edge out to: CSC250 CSC463 -- edges out to: CSC562 CSC567 CSC464 -- edge out to: CSC463 CSC465 -- edge out to: CSC464 CSC471 -- edge out to: CSC330 CSC510 -- edges out to: CSC330 CSC567 CSC521 -- edges out to: CSC340 CSC350 CSC522 -- edges out to: CSC330 CSC350 CSC523 -- edges out to: CSC130 CSC350 CSC524 -- edge out to: CSC523 CSC529 -- edges out to: CSC330 CSC350 CSC539 -- edges out to: CSC261 CSC330 CSC540 -- edge out to: CSC340 CSC553 -- edge out to: CSC350 CSC555 -- edge out to: CSC330 CSC561 -- edges out to: CSC261 CSC330 CSC350 CSC562 -- edges out to: CSC261 CSC340 CSC567 -- edges out to: CSC261 CSC330 CSC568 -- edges out to: CSC330 CSC567 CSC580 -- edges out to: CSC330 CSC350 CSC583 -- edges out to: CSC567 CSC580

**Transposed Graph Output:**
This shows the output of the transposed graph (the graph with all edge
directions reversed). From this output, we can easily check a course
to see what later courses depend on it. Note how important this class
(CSC 330) is!

CSC130 -- edges out to: CSC230 CSC250 CSC523 CSC230 -- edges out to: CSC261 CSC312 CSC330 CSC250 -- edges out to: CSC261 CSC312 CSC330 CSC350 CSC261 -- edges out to: CSC539 CSC561 CSC562 CSC567 CSC312 -- no edges out CSC330 -- edges out to: CSC339 CSC340 CSC471 CSC510 CSC522 CSC529 CSC539 CSC555 CSC561 CSC567 CSC568 CSC580 CSC339 -- no edges out CSC340 -- edges out to: CSC521 CSC540 CSC562 CSC350 -- edges out to: CSC521 CSC522 CSC523 CSC529 CSC553 CSC561 CSC580 CSC463 -- edge out to: CSC464 CSC464 -- edge out to: CSC465 CSC465 -- no edges out CSC471 -- no edges out CSC510 -- no edges out CSC521 -- no edges out CSC522 -- no edges out CSC523 -- edge out to: CSC524 CSC524 -- no edges out CSC529 -- no edges out CSC539 -- no edges out CSC540 -- no edges out CSC553 -- no edges out CSC555 -- no edges out CSC561 -- no edges out CSC562 -- edge out to: CSC463 CSC567 -- edges out to: CSC463 CSC510 CSC568 CSC583 CSC568 -- no edges out CSC580 -- edge out to: CSC583 CSC583 -- no edges out