# HW6

##
**Due Date**: Mar 18, before midnight (11:59:59PM)

This assignment comprises both written questions and implementation-based lab.

## HW6

Answer the following questions from the DPV book i) Q3.4 ii) Q3.6, iii) Q3.9., iv) Q3.11.

## Lab6: Strongly Connected Components

Implement the strongly connected components algorithm described on page
94 in the book. You'll have to increase the recursion limit to make this
work for the graphs below. You are only allowed to use basic python data
structures (e.g., dict, set, list), and should *not* use any graph
packages (e.g., networkx, igraph, etc.).

You should run your code on these two graphs: graph1 and graph2. These files list out all the directed edges, one per line.

Your code must print the SCCs in decreasing order of length. Also, for two SCCs with the same number of nodes, the one with a lower id vertex (i.e., lexicographically smaller) should come first. These SCCs must therefore be numbered from 0 to M-1 (which will denote the SCC_IDs), where M is the number of SCCs. Print them out in the following format:

SCC_ID LEN SET_OF_NODES_IN_SCC(in sorted order)

Once you have printed the SCCs, you must also print the edges that comprise the DAG structure over the SCCs. The edges must be printed in sorted order (in increasing order). The edges will use the SCC_IDs from above to denote the DAG nodes. Use the following format:

NUM_DAG_NODES NUM_DAG_EDGES EDGES (one per line in sorted order of source)

**Bonus**: Implement a non-recursive version of dfs method to handle large graphs, and test it on
graph3

Submit the output on the bonus graph. However, given the large size of the graph, just print the SCCs lengths in decreasing order, and the DAG number of nodes and edges.

### Grading

Use submitty to submit exactly one PDF and one .py script. The PDF file must contain your solutions to the HW, and the output from the python script.

### Policy on Academic Honesty

You are free to discuss how to tackle the assignment, but all coding must be your own. Please do not copy or modify code from anyone else, including code on the web. Any students caught violating the academic honesty principle will get an automatic F grade on the course and will be referred to the dean of students for disciplinary action.