Graph Manipulation

Objectives
  • Learn how to build and manipulate graph data structures

Getting Started

Create a project called P8 and import GraphManipulation-starter.jar

Your directory should now look like this:

P8/
├── resources
│   ├── MileagesLarge.csv
│   └── MileagesSmall.csv
└── src
    ├── GraphAbstract.java
    └── GraphImplementation.java
Part One
  1. Implement the readGraph() method

Testing

Enter an input mileages file and an output graph file in your run configurations, such as below:

resources/MileagesSmall.csv MileageSmall.dot

Here is the output you should see from your program, when it is working correctly:

digraph BST {
    ratio = 1.0;
    node [style=filled]
    node [fillcolor=darkslateblue]
    node [fixedsize=true]
    node [shape=oval]
    node [width=6]
    node [height=4]
    node [fontname=Arial]
    node [fontsize=60]
    node [fontcolor=white]
    edge [dir=none]
    edge [penwidth=24]
    edge [fontname=Arial]
    edge [fontsize=110]
    Node0 [label="Aspen"]
    Node1 [label="Boulder"]
    Node2 [label="Breckenridge"]
    Node3 [label="Craig"]
    Node4 [label="Denver"]
    Node5 [label="Durango"]
    Node6 [label="Fort Collins"]
    Node7 [label="Pueblo"]
    Node8 [label="Snowmass"]
    Node9 [label="Telluride"]
    Node0 -> Node8 [label="8" color="green"]
    Node1 -> Node4 [label="28" color="green"]
    Node1 -> Node6 [label="55" color="green"]
    Node4 -> Node6 [label="64" color="green"]
    Node2 -> Node4 [label="81" color="green"]
    Node1 -> Node2 [label="99" color="green"]
    Node4 -> Node7 [label="112" color="blue"]
    Node5 -> Node9 [label="120" color="blue"]
    Node2 -> Node8 [label="136" color="blue"]
    Node1 -> Node7 [label="146" color="blue"]
    Node3 -> Node8 [label="156" color="blue"]
    Node0 -> Node3 [label="158" color="blue"]
    Node2 -> Node7 [label="190" color="blue"]
    Node3 -> Node4 [label="198" color="blue"]
    Node0 -> Node9 [label="248" color="magenta"]
}

And this is the image that it generates:

correct output

In recitation you were exposed to webgraphviz as a visualization tool. Another way to generate the png is via the terminal with using the following command:

$ cd path/to/MileageSmall.dot
$ dot -Tpng MileageSmall.dot > MileageSmall.png
Part Two

The second part of this assignment requires you to implement two graph algorithms:

  1. Depth first search (DFS) starting at any arbitrary node.

  2. Breadth first search (BFS) starting at any arbitrary node.

Check out the corresponding lecture slides for details on how to implement these algorithms.

Here is the expected output from the supplied chart for the depthFirst() and breadthFirst() methods, called with Fort Collins and Aspen as the starting cities:

Depth First Search:
Visited Fort Collins
Visited Boulder
Visited Denver
Visited Breckenridge
Visited Snowmass
Visited Aspen
Visited Craig
Visited Telluride
Visited Durango
Visited Pueblo

Breadth First Search:
Visited Aspen
Visited Snowmass
Visited Craig
Visited Telluride
Visited Breckenridge
Visited Denver
Visited Durango
Visited Boulder
Visited Pueblo
Visited Fort Collins
Specifications

Your program must meet the following specifications:

  • Work on your own, as always.

  • Submit the file GraphImplementation.java.

  • Assignments should be implemented using Java 1.8.

  • Make sure your code runs on machines in the COMCS 120 lab.

  • Submit your program to the Checkin tab.

  • Read the syllabus for the late policy.

  • We will be checking programs for plagiarism, so please don’t copy from anyone else.

Grading Criteria (Part A)
  • 100 points for perfect submission.

  • 0 points for no submission, will not compile, etc.

  • Preliminary Tests: a compilation check. Use the information we have provided for MileageSmall.csv mileage chart.

  • Final Tests:

    • testDataSmall: Tests that the data structures are build correctly. (15 points)

    • testGraphSmall: Tests that the output graph has the correct contents. (15 points)

    • testDataLarge: Tests that the data structures are build correctly. (10 points)

    • testGraphLarge: Tests that the output graph has the correct contents. (10 points)

    • testDepth: Tests depth first starting at Fort Collins. (10 points)

    • testBreadth: Tests breadth first starting at Fort Collins. (10 points)

    • testDepth: Tests depth first with a city we choose. (15 points)

    • testBreadth: Tests breadth first with a city we choose. (15 points)