在c++地图中查找图的起始节点
Find start node of a graph in C++ map
假设我有一些从一些地方到另一些地方的票。但这些都不是顺序的。假设我有这样的票:
输入:[(E, F),("D"、"E"),(' C ', ' D '),("A"、"B")("B"、"C")]
现在我想找到一条完整的路径,我可以用这些票走完全程
输出:[("A"、"B")("B"、"C"),(' C ', ' D '),("D"、"E"),(E, F)]
为了在c++中实现它,我使用c++ stl map。我的c++示例代码如下:
void find_path(std::map<char, char> mymap, char start_node)
{
cout << start_node;
char val = start_node;
while (mymap.count(val) > 0)
{
val = mymap.find(val)->second;
cout << val;
}
}
int main()
{
std::map<char,char> mymap;
mymap['E'] = 'F';
mymap['D'] = 'E';
mymap['C'] = 'D';
mymap['A'] = 'B';
mymap['B'] = 'C';
char start_node = find_node(mymap);
std::cout<<"start node is " << start_node << "n";
find_path(mymap, start_node);
}
现在我有点卡在如何找到开始节点(如何写find_node()方法)。我现在能想到的任何选项,都需要额外的空间:
1. 我可以很容易地找到结束节点。然后通过反转所有的边来创建一个新的地图。这样就能找到从结束节点到开始节点的路径。
2. 查找计数为1的节点(只有2个,开始和结束节点)。现在我们可以很容易地找到结束节点。这样我们就知道起始节点了。
建议的方法都需要额外的空间。谁能告诉我一个简单的方法来找到开始节点
您知道从开始到结束的路径长度(在您的示例中为5)。对于您拥有的每张票,您可以确定从起点到完整路径终点的长度。例如,对于票D,E,剩下的长度只有2。检查所有的票,直到找到A,B它的剩余长度为5等于总长度。不需要额外的空间,但运行时间为O(N*N)。(编辑)实际上,O(N*N*log(N))因为映射查找是O(log N)
相关文章:
- A*路径查找-如何有效地更新openNodes优先级队列中的节点值
- N-Ary 树 C++ - 如何查找节点的级别
- 在由邻接列表表示的树中查找节点到另一个给定节点之间的路径
- 用于在链表中查找节点的算法
- 查找树中两个节点之间的最大成本边
- 查找树(不属于任何特定类型的简单连接树)中两个节点之间的路径
- 沿着路径查找节点数量
- 在 n 元树 c++ 中查找给定节点的祖先
- C++ 查找无序树中具有最高值的节点
- 查找二叉树的父节点函数
- 在 C 语言的链表中查找最小的两个节点
- 在从通用树转换的二进制树中查找节点的父
- 查找二叉树中特定节点的深度
- 如何使用BFS查找两个节点之间的距离
- 叮当匹配者.在 AST 中按翻译单位、行号和列查找相应的节点
- 使用 BFS 查找 2 个节点之间的最短路径
- 使用 TinyXML 在 XML 文档中查找特定节点
- 在具有任意数量子级的节点树中查找节点
- 查找两个链表的交集节点
- 查找相邻节点 星形寻路C++