next up previous contents
Next: The New Run Method: Up: Specifying a Graph Via Previous: The Specifications of the

The Graph::ReadInputFile Method:

We add a new method to the Graph class. This is a fairly standard read method. The source is given below:

Graph& Graph::ReadInputFile(char *filename)
{
  int i;
  int from_node, to_node;
  float edge_cost;
  int number_of_nodes;
  int number_of_edges;
  char prefix = 'n';
  int *ListArray;
  
  ifstream infile(filename,ios::in); 
  infile >> number_of_nodes >> number_of_edges;
  
  ListArray = new (int)[number_of_nodes+1];
  for(i=0;i<=number_of_nodes;++i){
    infile >> ListArray[i];
    }
    
  char **node_name = new (char *)[number_of_nodes];
  for(i = 0;i< number_of_nodes; ++i)
    node_name[i] = new (char)[20];
 
  //create name list for nodes:
  for(i=0; i<number_of_nodes; ++i){
    sprintf(node_name[i],"%c%d",prefix,i+1);
    }
  
  //create nodes
  float x_position, y_position;
  float x_delta,y_delta;
  x_position = 100.0;
  y_position = 200.0;
  x_delta = 100.0;
  y_delta = 100.0;
  //create node at default position
  cout << "Create node " << node_name[0] << endl;
  addNode(node_name[0],x_position,y_position);
  cout << "Finished node " << node_name[0] << endl;
  
  //for every 3 nodes, increment as follows:
  for(i=1; i<number_of_nodes; i+=3){
    x_position += x_delta;
    addNode(node_name[i],x_position,y_position-y_delta);
    if((i+1) < number_of_nodes){
      addNode(node_name[i+1],x_position,y_position);
      }
    if((i+2) < number_of_nodes){ 
      addNode(node_name[i+2],x_position,y_position+y_delta);
      }
    } 
  //create edges
  char from[20];
  char to[20];  
  for(i=0; i<number_of_edges; ++i){
    infile >> from_node >> to_node >> edge_cost;
    sprintf(from,"%c%d",prefix,from_node);
    sprintf(to,"%c%d",prefix,to_node);
    addEdge(findNode(from),findNode(to),edge_cost);    
    } 
  infile.close;
  return *this;  
}



Jim Peterson
1999-05-17