Dijkstra首个节点访问了
Dijkstra first node visited
我正在在C 中实现Dijkstra程序,我遇到了一些问题,让我解释一下:
目前我一直在遵循此代码:http://www.geeksforgeeks.org/printing-paths-dijkstras-shortest-path-path-algorithm/
此代码从源到所有其他顶点打印完整的路径。我正在使用array int parent [num_vertexs];存储路径。但是问题是我不想要完整的路径,只访问了第一个顶点。
如何仅获取访问的第一个节点?有什么方法可以仅打印每个节点的父数组的第一个节点?
非常感谢您的时间。
编辑:我将向您展示我的功能以打印父阵列,其中包含从源顶点到所有其他的完整路径。
void printPath(int parent[], int j){
// Base Case : If j is source
if (parent[j]==-1)
return;
printPath(parent, parent[j]);
printf("%d ", j);
}
此功能打印完整的路径,但我只想要路径的第一个顶点。问题是我不知道如何仅打印每个顶点的第一个,因为printf指令打印了完整的路径。你能告诉我我该怎么做吗?谢谢!
此功能是递归的;它调用自己打印除最后一个顶点以外的所有路径,然后打印最后一个顶点。将其限制在打印第一个顶点的简单,粗略的方法是排除其余部分:
void printFirstStep(int parent[], int j){
// Base Case : If j is source
if (parent[j]==-1)
return;
printFirstStep(parent, parent[j]);
if (parent[parent[j]]==-1)
printf("%d ", j);
}
一种更好的方法是将代码从递归到迭代(即非恢复):
:void printFirstStep(int parent[], int j){
// Base Case : If j is source
if (parent[j]==-1)
return;
while(parent[parent[j]] != -1)
j = parent[j];
printf("%d ", j);
}
(从您的问题中不清楚您了解递归。请注意,如果您不了解 这些功能,将它们粘贴到代码中不会对您有很多好处。)
相关文章:
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 类成员函数无法访问同一类的私有结构节点?
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 尝试从单向链表C++中删除单个节点时出现读取访问冲突
- 有没有办法访问C++ Boost rtree 中的非叶节点
- C++:无法访问节点值
- 如何访问链式哈希表链表中的每个节点
- 从链表数组访问节点数据
- 使用访问者设计模式在N- ARY树中重复访问子节点值
- 如何在OMNet++中访问我的模拟的不同节点
- 在节点插件中访问 inspector_agent.h
- 链接列表节点的访问违规:C
- Dijkstra首个节点访问了
- 在图算法中,确定是否访问节点的最佳方法是什么?
- 如何在 <Target> MsBuild 中访问节点外部的项目元数据?
- 递归函数插入二叉搜索树无法按根访问节点
- Assimp访问节点名称时出错
- 访问节点矢量