#include<map>
#include<iostream>
#include<string>
#include<vector>
#include<queue>
using namespace std;
const int maxn=1000;
/*
深度优先:利用递归或者栈
广度优先:队列
注意一点:标记数组inq[]记录的是节点是否已经入队过而非是否已经访问过->影响入队这句写在哪里
原因:已经在队列中的可能还没被访问,有有它的邻接点访问,它就会再次入队
*/
struct Node{
int index;
int weight;
};
vector<Node> adj[maxn];
int sum;
bool inq[maxn];
void BFS(int n){
queue<int> q;
q.push(n);
inq[n]=true;
while(!q.empty()){
int temp=q.front();
q.pop();
for(int i=0;i<adj[temp].size();i++){
int u=adj[temp][i].index;
if(inq[u]==false)
q.push(u);
}
}
}
void traverse(){
for(int i=0;i<sum;i++)
if(inq[i]==false)
BFS(i);//凡是如果队的在BFS中一定被访问过
}
int main(){
return 0;
}
图的BFS遍历
最新推荐文章于 2023-12-11 21:49:20 发布