图的广度遍历-邻接链表表示

来源:互联网 发布:恋夜秀场破解软件酷安 编辑:程序博客网 时间:2024/06/01 15:49
#include<stdio.h>#include<malloc.h>#define N 1005typedef struct Link{int data;struct Link * next;struct Link * fir;}Link;Link Pic[N];int front=0;int rear=0;int Check[N];int Queue[N];void BFS(Link a[],int fir){if(front<=rear){Link * p= a[fir].next;while(p!=NULL){if(!Check[p->data]){   Queue[rear++]=p->data;   Check[p->data]=1;}p=p->next;}BFS(a,Queue[front++]);}}void Init(int n){for(int i=0;i<n;i++){Pic[i].data=i;Pic[i].next=NULL;Pic[i].fir=&Pic[i];}}void CreatePic(Link a[],int n){int u,v;for(int i=0;i<n;i++){   scanf("%d %d",&u,&v);   Link * p=(Link * )malloc(sizeof(Link));   p->data=v;   p->next=NULL;   Pic[u].fir->next=p;   Pic[u].fir=p;   Link * q=(Link * )malloc(sizeof(Link));   q->data=u;   q->next=NULL;   Pic[v].fir->next=q;   Pic[v].fir=q;}}void RollBack(int n){front=0;rear=0;for(int i=0;i<n;i++){Check[i]=0;Queue[i]=-1;Pic[i].next=NULL;Pic[i].fir=&Pic[i];}}int main(){int n;int k,m,t;scanf("%d",&n);scanf("%d %d %d",&k,&m,&t);while(n--){Init(k);CreatePic(Pic,m);Check[t]=1;        Queue[rear++]=t;BFS(Pic,t);for(int i=0;i<rear;i++){i!=rear-1?printf("%d ",Queue[i]):printf("%d\n",Queue[i]);}RollBack(k);}return 0;}

原创粉丝点击