資料結構實驗圖論一:基於鄰接矩陣/鄰接表的廣度優先搜尋遍歷
阿新 • • 發佈:2019-02-17
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { int u,v; struct node *next; } Lin; Lin *head[105]; int rear,front,vis[105],q[105]; void add(int a,int b) { Lin *p; p=(Lin *)malloc(sizeof(p)); p->v=b; p->next=head[a]; head[a]=p; } void BFS(int e) { Lin *p; p=head[e]; while(p) { int t=p->v; if(vis[t]==0) { q[rear++]=t; vis[t]=1; } p=p->next; } if(front<rear) BFS(q[front++]); } int main() { int n,t,m,i,k,j,a,b; scanf("%d",&n); while(n--) { memset(head,NULL,sizeof(head)); memset(vis,0,sizeof(vis)); scanf("%d%d%d",&k,&m,&t); while(m--) { scanf("%d%d",&a,&b); add(a,b); add(b,a); } int tt; for(i=0; i<k; i++) { Lin *p,*q; for( p=head[i]; p; p=p->next) for(q=p->next; q; q=q->next) { if(q->v<p->v) { int t; t=p->v; p->v=q->v; q->v=t; } } } front=rear=0; printf("%d",t); vis[t]=1; BFS(t); for(i=0;i<k-1;i++) printf(" %d",q[i]); printf("\n"); } }