圖的深度遍歷-鄰接連結串列表示
阿新 • • 發佈:2019-01-22
#include<stdio.h> #include<malloc.h> #define N 1005 typedef 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 DFS(Link a[],int fir){ //printf("%d ",a[fir].data); Check[a[fir].data]=1; Queue[rear++]=a[fir].data; Link * p=a[fir].next; while(p){ if(!Check[p->data]){ DFS(a,p->data); } p=p->next; } } 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); DFS(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; }