Ниже описывается, как определяется мой график.
std::map< std::string, std::set<std::string> > g_db;
, а следующее - как я написал функцию для вычисления всех путей между двумя узлами, основываясь на некоторых из предыдущих вопросов.на этом сайте.
void compute_all_paths(std::vector<std::string>& visited, std::string& dest ) {
std::string back = visited.back();
std::set<std::string> adj_stations = g_db.find(back)->second;
for ( std::set<std::string>::iterator itr = adj_stations.begin(); itr != adj_stations.end(); ++itr ) {
if ( std::find(visited.begin(), visited.end(), *itr) != visited.end())
continue;
if (*itr == dest) {
visited.push_back( *itr );
for ( std::vector<std::string>::size_type idx = 0; idx < visited.size(); idx++ ){
std::cout << visited[idx] << " ";
}
std::cout << std::endl;
visited.erase( visited.begin() + (visited.size() - 1));
break;
}
}
for ( std::set<std::string>::iterator itr = adj_stations.begin(); itr != adj_stations.end(); itr++ ) {
if ( std::find(visited.begin(), visited.end(), *itr) != visited.end() || *itr == dest )
continue;
visited.push_back( *itr );
compute_all_paths(visited, dest );
visited.erase( visited.begin() + (visited.size() - 1));
}
}
Мой график очень большой, эта функция падает с огромным списком вызовов функции recursive
со следующим сообщением:
Необработанное исключение при0x7c812afb в Railways.exe: исключение Microsoft C ++: std :: bad_alloc в ячейке памяти 0x00033748
Для маленьких графиков это работает очень хорошо, но не для огромных.
Может кто-нибудь помочь мнечтобы найти проблему.