NYOJ 20 吝啬的国度无向图的遍历

View Code
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<iostream>
 4 #include<queue>
 5 #include<malloc.h>
 6 #include<cstring>
 7 #define N 100001
 8 
 9 using namespace std;
10 
11 typedef struct city
12 {
13    int v;
14    struct city *next;
15 }City;
16 
17 City c[N];
18 int n,visit[N];
19 int father[N];
20 
21 void connect(int from,int to)//连接两个点
22 {
23      City *p;
24      p = (City *)malloc(sizeof(City));
25      p->v = to;    
26      p->next = c[from].next;
27      c[from].next = p;
28 }    
29 
30 void destory(City *p)//递归释放空间(从阿焦那里学的,嘻嘻~)
31 {
32     if(p == NULL)   
33         return;
34      destory(p->next);  
35 }
36 
37 queue<City>q;
38 int main()
39 { 
40    int i,j,ncases,S;
41    int a,b;  
42    City *link;
43     
44    scanf("%d",&ncases);  
45    while( ncases-- )
46    {
47       scanf("%d%d",&n,&S);
48       memset(visit,0,sizeof(visit)); 
49       for(i=1; i<=n; i++)
50       {
51           c[i].v = i;
52           c[i].next = NULL;
53       }   
54       for(i=1; i<n; i++)
55       {    
56           scanf("%d%d",&a,&b);
57           connect(a,b);   
58           connect(b,a); 
59       } 
60       visit[S] = 1;
61       father[S] = -1; 
62       q.push(c[S]); 
63       while( !q.empty() )
64       {
65           City p = q.front();
66           q.pop();  
67           link = p.next;
68           while( link != NULL)
69           {
70              if( !visit[link->v] )
71              {
72                  father[link->v] = p.v;  
73                  visit[link->v] = 1; 
74                  q.push(c[link->v]);
75              }
76              link = link->next;
77           }  
78        }  
79        while( !q.empty())
80          q.pop();
81       printf("%d",father[1]);   
82       for(i=2; i<=n; i++)
83       {
84          printf(" %d",father[i]);
85       }
86       printf("\n");
87       for(i=1; i<=n; i++)
88        destory(&c[i]);        
89     } 
90    //system("pause");
91    return 0;   
92 }
posted @ 2012-05-15 22:21  zhongya  阅读(159)  评论(0编辑  收藏  举报