找出图中两个节点之间的所有路径
Find all the paths between two nodes in a graph
我的图是这样定义的
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
函数的调用有以下消息:
在Railways.exe: microsoftc++中0x7c812afb的未处理异常异常:std::bad_alloc在内存位置0x00033748
对于小图形,这个方法非常有效,但是对于大图形,这个方法就不适用了。
谁能帮我找出这个问题
太多层次的递归会导致堆栈溢出崩溃。这就是为什么递归不太适合大型数据集。
但是所有递归调用都可以简化为循环。您应该尝试删除递归调用,并用循环代替它们。
相关文章:
- 节点 *temp; 和节点 *tmp = 新节点之间的差异
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 查找树中两个节点之间的最大成本边
- 树节点之间的最大距离中的运行时错误
- 在 NUMA 节点之间散布 OpenMP 线程
- 添加一个节点,并在通用树中的两个给定节点之间找到路径成本,其中c 中的儿童列表
- 光标和节点的AST遍历之间有什么区别
- 查找树(不属于任何特定类型的简单连接树)中两个节点之间的路径
- Cassandra中C 驱动程序的协调器节点和接触点之间的差异
- 使用 Dijkstra 算法计算两个节点之间的最短路径
- 计算汽车节点静脉之间的距离
- 链接列表C 类,这两个添加节点实现之间的差异是什么?
- 有没有办法在两个ROS节点之间具有优先级
- 如何使用BFS查找两个节点之间的距离
- 使用 BFS 查找 2 个节点之间的最短路径
- 如何在不同的cpp中生成的节点之间进行交互.
- 树中两个节点之间的最小距离