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;
}