如何判断有向图中两顶点x与y间是否存在路径?附代码片段
判断有向图中两顶点是否存在路径的C++代码片段
这是一段用来实现有向图中两个顶点间路径存在性判断的C++代码,不过看起来核心方法isGRoad里的遍历逻辑还没写完:
#include<iostream> #include <list> using namespace std; class Graf { private: int Vf; list<int> *adj; public: // Constructor Graf(int Vf) { this->Vf = Vf; adj = new list<int>[Vf]; } void addEdge(int vf, int w) // 添加从vf指向w的有向边 { adj[vf].push_back(w); } bool isGRoad(int first, int second) { if (first == second) // 起始顶点和目标顶点相同的特殊情况 return true; bool *visited = new bool[Vf]; for (int i =... // 此处的遍历初始化与搜索逻辑未完成 } };
简单拆解下这段代码的设计思路:
- 采用邻接表(
list<int> *adj)存储有向图,这种结构对稀疏图的空间利用率更高 - 构造函数负责初始化顶点总数和邻接表数组
addEdge方法用来添加有向边,把目标顶点w加入到起始顶点vf的邻接列表中isGRoad是实现路径判断的核心方法:- 先处理最直接的特殊情况:如果起始和目标顶点是同一个,直接返回
true - 创建
visited数组用来标记已访问的顶点,避免遍历过程中陷入循环 - 后续原本应该通过DFS(深度优先搜索)或BFS(广度优先搜索)从
first出发遍历,检查是否能抵达second,但这部分代码还未完成
- 先处理最直接的特殊情况:如果起始和目标顶点是同一个,直接返回
内容的提问来源于stack exchange,提问作者dxerok
相关产品推荐
相关产品推荐

