假设有向图G以邻接矩阵方式存储,试编写算法判断该有向图中是否存在从顶点i到顶点j的路径(i~=j)利用c++实现,并在主函数测试输出
时间: 2024-12-13 08:15:59 浏览: 9
MATLAB源码集锦-有向图关联矩阵和邻接矩阵的相互转换算法代码
5星 · 资源好评率100%
在C++中,我们可以使用深度优先搜索(Depth-First Search, DFS)或者广度优先搜索(Breadth-First Search, BFS)来判断有向图G中是否存在从顶点i到顶点j的路径。这里我们选择DFS来演示,因为它更适合用于寻找路径。
首先,我们需要定义一个布尔型的结构体`AdjacencyMatrix`表示邻接矩阵,并包含一个辅助标志`visited[]`来记录每个节点是否已经被访问过:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 定义邻接矩阵
struct AdjacencyMatrix {
vector<vector<bool>> matrix;
vector<bool> visited;
};
bool hasPath(AdjacencyMatrix& graph, int i, int j) {
// 初始化visited数组
for (int k = 0; k < graph.matrix.size(); ++k)
graph.visited[k] = false;
// 开始DFS
bool pathFound = dfs(graph, i, j);
return pathFound;
}
// 深度优先搜索函数
bool dfs(AdjacencyMatrix& graph, int node, int target) {
graph.visited[node] = true;
if (node == target) {
return true;
}
// 遍历邻接矩阵中的所有未访问邻居
for (int neighbor : graph.matrix[node]) {
if (!graph.visited[neighbor] && graph.matrix[node][neighbor]) {
if (dfs(graph, neighbor, target)) {
return true;
}
}
}
return false;
}
int main() {
// 创建一个示例有向图
AdjacencyMatrix g = { /* 初始化邻接矩阵 */ };
// 测试输入顶点i和j
int i = 0;
int j = 4; // 假设你想检查从顶点0到顶点4是否有路径
if (hasPath(g, i, j)) {
cout << "存在从顶点" << i << "到顶点" << j << "的路径。\n";
} else {
cout << "不存在从顶点" << i << "到顶点" << j << "的路径。\n";
}
return 0;
}
```
在这个例子中,如果`hasPath()`返回`true`,那么就有从顶点i到顶点j的路径;反之则无。注意你需要填充`AdjacencyMatrix`的`matrix`部分以实际表示你的图。
阅读全文