There's an array of structs, containing the different routes between each points. For example:

http://img693.imageshack.us/img693/9682/96931372.png

Now what my program should do is, when a user inputs his starting position and the desired ending position, all possible ways are shown. For example if he starts at F and wants to go to E, then the following is shown:

My code so far, it doesn't work but I'm kind of stuck.Code:Route: F -> I I -> E Total distance: 80 Route: F -> B B -> E Total distance: 95 Route: F -> C C -> H H -> G G -> B B -> E Total distance: ##

Could someone go over it for me?

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