无向图BFS判断是否有环
作者:
我是高情商
,
2024-12-08 18:43:22
,
所有人可见
,
阅读 4
bool isBFS(int v) {
//定义每个顶点的parent为-1
int parent[N];
for (int i = 0; i <n; i++) parent[i] = -1;
//定义一个BFS使用的queue
queue<int> q;
q.push(v);
visited[v] = true;
while (!q.empty()) {
int t= q.front(); q.pop();
//检测t的全部邻接点p,如果p不是t的parent,但是已经访问过,则存在环
for (auto p=head[t];p;p=p->next) {
int j= p->id;
if (!visited[j]) { //如果没有访问
visited[j] = true; //标记访问
q.push(j); //进队
parent[j] = t; //记录它的parent
} else if (j!= parent[t]) //j是t的邻接点,被访问过,但不是t的parent
return true; //返回true
}
}
return false;
}