#include <stdio.h> #include <stdlib.h> #define MAX_VEX_NUM 20 static int visited[MAX_VEX_NUM]; typedef struct ArcNode{ int adjvex; struct ArcNode *nextacr; }ArcNode; typedef struct TNode{ int data; struct ArcNode *firstarc; }TNode; void bfs(TNode List[],int vnode,int visited[]){ int r=0,f=0,queue[MAX_VEX_NUM]; ArcNode *p; visited[vnode]=1; printf("%d",vnode); queue[0]=vnode; while (f<=r){ vnode=queue[f++]; p=List[vnode].firstarc; while (p!=NULL){ vnode=p->adjvex; if (visited[vnode]==0){ visited[vnode]=1; printf("%d",vnode); queue[++r]=vnode;} p=p->nextacr;} } } void traverse(TNode List[],int n) { for(int i=1;i<=n;i++) visited[i]=0; for(int i=1;i<=n;i++) if(visited[i]==0) bfs(List,i,visited); } void main() { int n,NodeNum; scanf("%d",&n); TNode List[MAX_VEX_NUM]; for (int i=1;i<=n;i++) scanf ("%d",&List[i].data); for (int i=1;i<=n;i++){ ArcNode *Arc=(ArcNode*)malloc(sizeof(ArcNode)); scanf("%d",&Arc->adjvex); List[i].firstarc=Arc; scanf("%d",&NodeNum); while (NodeNum>0){ ArcNode *Arctemp=(ArcNode*)malloc(sizeof(ArcNode)); Arctemp->adjvex=NodeNum; Arc->nextacr=Arctemp; Arc=Arctemp; scanf("%d",&NodeNum); } if (NodeNum<0) {Arc->nextacr=NULL;continue;} } printf("广度优先搜索顺序:/n"); traverse(List,n); }