next up previous contents
Next: An Application: Up: Generating Obstacle Arrays: Previous: The GenerateObstacleArray() Method:

The ReadObstacleArrayMethod():


DP& DP::ReadObstacleFile(char *filename)
{
  int check = 0;
  
  int i,j,k,m;
  int from_node, to_node;
  float edge_cost;
  int number_of_rows,number_of_columns;
  int number_of_nodes,current_node;
  int number_of_edges;
  char prefix = 'n';
  int *ListArray;
  
  ifstream infile(filename,ios::in); 
  infile >> number_of_rows >> number_of_columns >> number_of_edges;
  number_of_nodes = number_of_rows*number_of_columns;
  cout << "number_of_nodes = " << number_of_nodes << endl;
  cout << "number_of_edges = " << number_of_edges << endl;
  
  ListArray = new (int)[number_of_nodes+2];
  for(i=0;i<number_of_nodes+2;++i){
    infile >> ListArray[i];
    cout << "ListArray[" << i << "] = " << ListArray[i] << endl;
    }
    
  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);
    if(check==1)
      cout << "node_name[" << i << "] = " << node_name[i] << endl;
    }
  
  //create nodes
  float x_position, y_position;
  float x_delta,y_delta;
  x_position = 100.0;
  y_position = 500.0;
  x_delta = 100.0;
  y_delta = 200.0;

  for(j=0;j<number_of_columns;++j){  
    for(i=0;i<number_of_rows;++i){
      current_node = i*number_of_columns+j; 	    
      G->addNode(node_name[current_node],x_position+i*x_delta,
	         y_position-j*y_delta,NULL);
      }
    }  
  //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);
    if(check==1){
      cout << "from_node = " << from_node << endl;
      cout << "from_node_name = " << from << endl;
      cout << "to_node = " << to_node << endl;
      cout << "to_node_name = " << to << endl;
      cout << "edge_cost = " << edge_cost << endl;
      cout << "Creating Edge from " << from << " to " << to 
           << " of cost " << edge_cost << endl;
      cout << "Entering findNode call for from node " << endl;
      }
    Gnode *t = G->findNode(from);
      if(check==1)
        cout << "t->name() = " << t->name() << endl;
    Gnode *s = G->findNode(to);
      if(check==1)
        cout << "t->name() = " << t->name() << endl;    
    if(!(t==NULL && s==NULL)){
      G->addEdge(s,t,edge_cost,NULL);
      }
    else{
      cout << "Problem in edge construction" << endl;
      exit(1);
      }
    if(check==1)
      cout << "Finished Edge " << endl;           
    }
   
  infile.close();
  return *this;  
}



Jim Peterson
1999-04-13