//基于邻接矩阵的BFS算法bfsm() /*#include<stdio.h> #include<stdlib.h> //用队列方式进行点的存储 #include<queue> using namespace std; #define MAX 100 bool mark[MAX];//标记 typedef struct { int n,e; int edge[MAX][MAX]; }matrix_graph; matrix_graph *g=(matrix_graph *)malloc(sizeof(matrix_graph)); void create(matrix_graph *g) { int i,v,u; scanf("%d%d",&g->n,&g->e); for(i=0;i<g->e;i++) { scanf("%d%d",&v,&u); g->edge[v][u]=g->edge[u][v]=1; } } void bfsm(int i) { int j; queue<int >q; mark[i]=1; q.push(i); while(!q.empty()) { i=q.front(); q.pop(); printf("%d ",i); for(j=0;j<g->n;j++) { if(g->edge[i][j]==1&&!mark[j]) { mark[j]=1; q.push(j); } } } } void bfs(matrix_graph *g) { int i; for(i=0;i<g->n;i++) { if(!mark[i]) { bfsm(i); puts(""); } } } int main() { int i; for(i=0;i<MAX;i++) mark[i]=0; create(g); bfs(g); return 0; }*/ //基于邻接表的BFS算法:bfsl() #include<stdio.h> #include<stdlib.h> #include<queue> using namespace std; #define MAX 100 bool mark[MAX]; typedef struct node { int adjver; struct node *next; }edgeNode; typedef struct { int vertex; edgeNode *link; }vernode; typedef struct { int n,e; vernode adjlist[MAX]; }link_graph; link_graph *ga=(link_graph *)malloc (sizeof(link_graph)); void create(link_graph *ga) { int i,v,u; edgeNode *p; scanf("%d%d",&ga->n,&ga->e); for(i=0;i<ga->n;i++) { ga->adjlist[i].vertex=i; ga->adjlist[i].link=0; } for(i=0;i<ga->e;i++) { scanf("%d%d",&u,&v); p=(edgeNode*)malloc(sizeof(edgeNode)); p->adjver=u; p->next=ga->adjlist[v].link; ga->adjlist[v].link=p; p=(edgeNode *)malloc(sizeof(edgeNode)); p->adjver=v; p->next=ga->adjlist[u].link; ga->adjlist[u].link=p; } } void bfsl(int i) { int j; queue<int>q; edgeNode *p; mark[i]=1; q.push(i); while(!q.empty()) { i=q.front(); q.pop(); printf("%d ",i); p=ga->adjlist[i].link; while(p) { j=p->adjver; if(!mark[j]) { mark[j]=1; q.push(j); } p=p->next; } } } void bfs(link_graph *ga) { int i; for(i=0;i<MAX;i++) mark[i]=0; for(i=0;i<ga->n;i++) { if(!mark[i]) { bfsl(i); puts(""); } } } void output() { edgeNode *p; int i; for(i=0;i<ga->n;i++) { p=ga->adjlist[i].link; while(p) { printf("(%d,%d)/n",i,p->adjver); p=p->next; } } return ; } int main() { create(ga); output(); bfs(ga); return 0; }