Code:
struct Route
{
string from;
string to;
int distance;
};
const int Total_routes = 10;
Route routes [ Total_routes ] =
{ { "F", "I", 20 }, { "F", "B", 45 }, { "H", "C", 25 },
{ "B", "E", 50 }, { "I", "E", 60 }, { "F", "C", 60 },
{ "H", "G", 50 }, { "B", "G", 30 },
{ "H", "D", 45 }, { "A", "E", 40 } } ;
void show_route_taken ( int max_stations , Route routes[] )
{
}
void swap_route ( Route routes[] , int n )
{
string tempstring = routes[n].from;
routes[n].from = routes[n].to;
routes[n].to = tempstring;
}
bool been_there ( string point , Route temp_routes[] )
{
int n ( 0 );
for ( int t ( 0 ) ; t < Total_routes ; t++ )
{
if ( point.compare(temp_routes[t].from) == 0 || point.compare(temp_routes[t].to) == 0 )
{
n++;
}
}
if ( n > 0 )
{
return true;
}
else
{
return false;
}
}
void find_route(string point_start,string point_finish,string temp_point_start,string temp_point_finish,Route routes[],Route temp_routes[],int points_visited)
{
if (point_finish.compare(temp_point_finish)==0)
{
cout << endl << temp_point_finish << " - route found" << endl;
//show_route_taken();
}
else
{
int b(0);
string i[Total_routes];
for ( int a ( 0 ) ; a < Total_routes ; a++ )
{
if ( ((routes[a].from.compare(temp_point_finish) == 0) && (routes[a].to.compare(temp_point_start) != 0) ) || ((routes[a].to.compare(temp_point_finish) == 0) && (routes[a].from.compare(temp_point_start) != 0) ))
{
if ( routes[a].to.compare(temp_point_finish) == 0 )
{
swap_route ( routes , a );
}
i[b] = routes[a].to;
b++;
}
}
for ( int c ( 0 ) ; c < b ; c++ )
{
if ( !been_there (i[c],temp_routes) )
{
temp_routes[points_visited].from = temp_point_finish;
temp_routes[points_visited].to = i[c];
find_route(point_start,point_finish,temp_point_finish,i[c],routes,temp_routes,points_visited);
}
}
}
}
void travel ( Route routes[] , Route temp_routes[] )
{
int points_visited ( 0 );
string startstr, finishstr, temp_point_finish;
cout << "Input starting point: ";
getline(cin,startstr);
cout << "Input finishing point: ";
getline(cin,finishstr);
for ( int g ( 0 ) ; g < Total_routes ; g++ )
{
if ( routes[g].from.compare(startstr) == 0 || routes[g].to.compare(startstr) == 0 )
{
if ( routes[g].to.compare(startstr) == 0 )
{
swap_route ( routes , g );
}
temp_point_finish = routes[g].to;
find_route (startstr,finishstr,startstr,temp_point_finish,routes,temp_routes,points_visited);
}
for ( int x ( 0 ) ; x < Total_routes ; x++ )
{
temp_routes[x].from = " ";
temp_routes[x].to = " ";
}
points_visited = 0;
}
}
int main ()
{
Route temp_routes[Total_routes];
travel (routes,temp_routes);
return 0 ;
}