//****************************************************************************
//
// Cs361      : Fall 2003 Ohio University Travis Dillon
// Homework 5 : Breadth first spanning trees
// file       : graph.h
// started    : 10-14-03
// summary    : This is the header for the Graph class.
//
//****************************************************************************

#ifndef GRAPH_H
#define GRAPH_H

#include "node.h"

class Node;

class Graph
{
 public:
   Graph();

   void read_directed(istream& fin, ostream& fout);
   void read_num_vertices(istream& fin, ostream& fout);
   void read_vertices_name(istream& fin, ostream& fout);
   void read_num_edges(istream& fin, ostream& fout);
   void read_edges(istream& fin, ostream& fout);
   void read_start(istream& fin, ostream& fout);

   void insert_edge(ostream& fout, string from, string to, float the_weight);
   size_t get_id(ostream& fout, string in_name);
   void bfs(ostream& fout);
   void is_spanning(ostream& fout);

 private:
   list<Node>* array;  //array of pointers to lists
   vector<string> names;  //vector of strings of names of verticies
   size_t start_vertex;  //vertex that the bfs will begin with
   int num_vertices;  //number of vertices in the graph
   int num_edges;  //number of edges in the graph
   bool directed;  //true of the graph is directed, otherwise false
   bool spanning;  //true if the graph has a spanning tree
};

#endif  //GRAPH_H