Please send questions to
st10@humboldt.edu .
//---------------------------------------------------------------
// File: try_graph.cpp
// Name: Sharon M. Tuttle
// last modified: 4-27-05
//
// Purpose: try the graph template class out a little
//
//--------------------------------------------------------------
#include <iostream>
#include <string>
#include "graph.h"
using namespace std;
int main()
{
// try out constructor
graph<char> letterGraph;
graph<string> cityGraph;
cout << "Playing with graph..." << endl;
cout << endl;
cout << "1=pass, 0=fail: " << endl;
cout << "---------------------------------------" << endl;
// tests involving empty graphs
cout << (letterGraph.get_num_vertices( ) == 0) << endl;
cout << (cityGraph.get_num_vertices( ) == 0) << endl;
cout << (letterGraph.get_num_edges( ) == 0) << endl;
cout << (cityGraph.get_num_edges( ) == 0) << endl;
cout << endl;
cout << "letterGraph should be empty: " << endl;
letterGraph.print_graph( );
cout << endl;
cout << "cityGraph should be empty: " << endl;
cityGraph.print_graph( );
cout << (letterGraph.is_vertex('A') == false) << endl;
cout << (cityGraph.is_vertex("Arcata") == false) << endl;
// now adding some vertices...
letterGraph.add_vertex('G');
cout << endl;
cout << (letterGraph.is_vertex('G') == true) << endl;
cout << (letterGraph.get_num_vertices( ) == 1) << endl;
cout << (letterGraph.get_num_edges( ) == 0) << endl;
cout << "letterGraph has 1 vertex, G: " << endl;
letterGraph.print_graph( );
letterGraph.add_vertex('M');
cout << endl;
cout << (letterGraph.is_vertex('M') == true) << endl;
cout << (letterGraph.is_vertex('F') == false) << endl;
cout << (letterGraph.get_num_vertices( ) == 2) << endl;
cout << (letterGraph.get_num_edges( ) == 0) << endl;
cout << (letterGraph.is_edge('G', 'M') == false) << endl;
cout << "letterGraph has 2 vertices, G and M: " << endl;
letterGraph.print_graph( );
// now adding an edge...
letterGraph.add_edge('G', 'M');
cout << endl;
cout << (letterGraph.is_vertex('M') == true) << endl;
cout << (letterGraph.is_vertex('F') == false) << endl;
cout << (letterGraph.get_num_vertices( ) == 2) << endl;
cout << (letterGraph.get_num_edges( ) == 1) << endl;
cout << (letterGraph.is_edge('G', 'M') == true) << endl;
cout << (letterGraph.is_edge('M', 'G') == true) << endl;
cout << "letterGraph has 2 vertices, G and M, with edge between: "
<< endl;
letterGraph.print_graph( );
// now adding more vertices and more edges
letterGraph.add_vertex('H');
letterGraph.add_vertex('B');
letterGraph.add_vertex('X');
letterGraph.add_vertex('S');
letterGraph.add_edge('B', 'X');
letterGraph.add_edge('S', 'B');
letterGraph.add_edge('H', 'B');
letterGraph.add_edge('B', 'S');
cout << endl;
cout << (letterGraph.is_vertex('M') == true) << endl;
cout << (letterGraph.is_vertex('F') == false) << endl;
cout << (letterGraph.get_num_vertices( ) == 6) << endl;
cout << (letterGraph.get_num_edges( ) == 4) << endl;
cout << (letterGraph.is_edge('G', 'M') == true) << endl;
cout << (letterGraph.is_edge('M', 'G') == true) << endl;
cout << (letterGraph.is_edge('X', 'H') == false) << endl;
cout << "letterGraph has 6 vertices (G,M,H,B,X,S), " << endl
<< " with 4 edges between: (G,M), (B,X), (S,B), (H,B)"
<< endl;
letterGraph.print_graph( );
// now removing an edge
letterGraph.remove_edge('B', 'S');
cout << endl;
cout << (letterGraph.is_vertex('B') == true) << endl;
cout << (letterGraph.is_vertex('S') == true) << endl;
cout << (letterGraph.get_num_vertices( ) == 6) << endl;
cout << (letterGraph.get_num_edges( ) == 3) << endl;
cout << (letterGraph.is_edge('B', 'S') == false) << endl;
cout << (letterGraph.is_edge('S', 'B') == false) << endl;
cout << (letterGraph.is_edge('X', 'B') == true) << endl;
cout << "letterGraph has 6 vertices (G,M,H,B,X,S), " << endl
<< " with 3 edges between: (G,M), (B,X), (H,B) (no (S,B)!)"
<< endl;
cout << "letterGraph has 6 vertices, with 3 edges between: "
<< endl;
letterGraph.print_graph( );
// now trying out operator =
graph<char> initialGraph;
initialGraph = letterGraph;
cout << endl;
cout << "initialGraph should 'look' like letterGraph: " << endl;
initialGraph.print_graph( );
letterGraph.add_vertex('Q');
letterGraph.add_edge('Q', 'B');
cout << endl;
cout << "letterGraph added Q and (Q,B): " << endl;
letterGraph.print_graph( );
cout << endl;
cout << "initialGraph does NOT have Q and (Q,B): " << endl;
initialGraph.print_graph( );
// now trying out get_neighbors function
set<char> b_neighbors, p_neighbors;
letterGraph.add_vertex('P');
b_neighbors = letterGraph.get_neighbors('B');
p_neighbors = letterGraph.get_neighbors('P');
cout << endl;
cout << (p_neighbors.get_size( ) == 0) << endl;
cout << (b_neighbors.get_size( ) == 3) << endl;
cout << (b_neighbors.contains('H') == true) << endl;
cout << (b_neighbors.contains('X') == true) << endl;
cout << (b_neighbors.contains('Q') == true) << endl;
cout << (b_neighbors.contains('B') == false) << endl;
cout << (b_neighbors.contains('M') == false) << endl;
cout << (b_neighbors.contains('S') == false) << endl;
return EXIT_SUCCESS;
}