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