广度优先遍历也是图的遍历中一种,其原理同广度优先搜索大致相同,
运用了队列,当我们找到一个未被访问过的点时,将其入队,并置成
true,然后依次寻找是否有与已经入队的点相连且未被访问过的点。
其遍历过程
如图C:从v1出发遍历过程为:v1-v2-v3-v4-v5-v6-v7
Code:
#include<cstdio> #include<iostream> using namespace std; struct node { int end; int len; int next; };node edge[2333]; int n,m,first[2333],cnt,visited[2333]; void add_edge(int s,int e,int d) { cnt++; edge[cnt].end=e; edge[cnt].len=d; edge[cnt].next=first[s]; first[s]=cnt; return; } void bfs(int s) { int que[2333],k=0; k++; que[k]=s; visited[que[k]]=true; for(int i=1;i<=k;i++) { printf("%d ",que[i]); for(int j=first[que[i]];j!=0;j=edge[j].next) { if(!edge[j].end) { k++; que[k]=edge[j].end; visited[que[k]]=true; } } } return; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int s,e,d; scanf("%d%d%d",&s,&e,&d); add_edge(s,e,d); add_edge(e,s,d); } for(int i=1;i<=n;i++) { if(!visited[i]) { bfs(i); printf("\n"); } } return 0; }
/运用边表存图/