bfs找一个点到另外一个点是否有路c++
时间: 2024-10-21 12:09:29 浏览: 15
BFS(宽度优先搜索)是一种用于遍历或查找图中节点的算法,常用于寻找两点间是否存在路径,尤其是在无权图或有向图中。在C++中,你可以使用邻接矩阵或邻接表数据结构来实现BFS。
以下是基本步骤:
1. **初始化**:创建一个队列并将起点放入队首,并设置一个标志数组标记已访问过的节点。
2. **循环**:从队列头部取出一个节点,如果它是终点,则返回true表示存在路径;若不是,将该节点的所有未访问邻居加入队列并标记为已访问。
3. **递归**:对每个新加入的节点重复以上操作,直到队列为空或找到终点。
下面是一个简单的示例代码片段(假设使用邻接列表):
```cpp
#include <queue>
#include <vector>
bool bfs(int start, int end, std::vector<std::pair<int, int>>& graph) {
std::queue<int> q;
std::vector<bool> visited(graph.size(), false);
q.push(start);
visited[start] = true;
while (!q.empty()) {
int curr = q.front();
q.pop();
if (curr == end) return true; // 找到了目标
for (const auto& neighbor : graph[curr]) {
int nextNode = neighbor.first;
if (!visited[nextNode]) {
q.push(nextNode);
visited[nextNode] = true;
}
}
}
return false; // 没有找到路径
}
// 使用例子
std::vector<std::pair<int, int>> adjList; // 假设这是你的邻接列表
int source = ...;
int destination = ...;
if (bfs(source, destination, adjList)) {
std::cout << "有从" << source << "到" << destination << "的路径";
} else {
stdots << "没有从" << source << "到" << destination << "的路径";
}
阅读全文