无向图的BFS遍历法
#include<bits/stdc++.h> #define ll long long #define maxsize 100100 #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int v,e,num; vector<int>g[maxsize]; int used[maxsize];//有没有用到顶点 int main() { while(cin>>v>>e)//v是顶点数,e是边数 { num=0; mem(used,0); mem(mark,0); for(int i=1;i<=e;++i)//输入每一条边的两个端点的编号 { int a,b; cin>>a>>b; g[a].push_back(b);//双端进入vector g[b].push_back(a); } queue<int>q; q.push(1); while(!q.empty()) { int top=q.front(); q.pop(); used[top]=1;//标记队列的端点已经使用过了,就不必进入队列了 for(int i=0;i<g[top].size();++i)//枚举所有与top相连的顶点 { ...... int tmp=g[top][i]; if(!used[tmp])//如果顶点tmp没有被标记过,就进入队列 q.push(tmp); ...... } ...... } ...... for(int i=0;i<maxsize;++i) g[i].clear();//清空vector } return 0; }