For all of these assignment, you may work together so long as you turn in your own work (i.e. it's fine to share ideas, code next to each other on separate machines, etc., but you may not cut and paste code from each other).

Program 1

Implement a tree class with any number of children per node.  I encourage you to implement your solution generically such that you will be able to extend this program into a graph (i.e. don't assume child pointers are a-cyclic in your data structure; it will just so happen in this assignment that the data will be a tree and not a graph) -- after all, all trees are graphs, right?

Your program should allow you to display the tree graphically (using a reasonable drawing algorithm), load a tree via user input (string parsing will help here), and traverse the tree via breadth and depth first implementations.

Program 2

Create a visual "board" class that graphically displays a tic-tac-toe board and allows the user to click to select X or O (allowing 2 human players to play the game).

Program 3

Implement a min-max AI computer player for your tic-tac-toe program.  If you implement alpha-beta pruning, you will receive +25% extra credit.

Program 4

Implement a graph class (hopefully an only slightly-modified if at all modified version from program 1) that displays itself (reasonable drawing algorithm here - nothing too complex) and will execute Kruskal's and Prim's MST algorithms.

Program 5

Using your knowledge of graph theory and simulations, create a simulation of Atlanta traffic patterns.  Your graph data structure should accurately model the major roads through Atlanta, including alternate back-roads.  The "sims" in your application will be classes of drivers, each with different characteristics and starting and ending vertices (i.e. different drivers live and work in different areas of town).

Drivers ("sims") in the application should have some, but limited knowledge of the road conditions and should route their paths through the graphs based upon this knowledge.  Sims should also retain history from day to day, i.e. remembering best/worst routes through the graph.

Write your program such that you can control various aspects of the simulation, altering the number of drivers and their characteristics, density of home and work vertices, etc.

Your program should also visualize the graph and the simulation.

Program 6

Write a visual program that demonstrates (and solves) the N-Queens problem as discussed in class.  Here is my example solution in C#.