数据结构1 - 06-图1 列出连通集

倖福魔咒の 提交于 2020-04-04 18:05:16

 

 1 #include<stdio.h>
 2 #define MAXN 10
 3 int g[MAXN][MAXN],vis[MAXN],n,e;
 4 void init();
 5 void read();
 6 void BFS(int x);
 7 void DFS(int x);
 8 int main(){
 9     int i,j;
10     scanf("%d %d",&n,&e);
11     init();
12     read();
13       
14     for(i=0;i<n;i++){
15         if(vis[i]==0){
16             printf("{");
17             DFS(i);
18             printf(" }\n");
19         }
20     }
21     for(i=0;i<n;i++) vis[i]=0;
22     for(i=0;i<n;i++){
23         if(vis[i]==0){
24             printf("{");
25             BFS(i);
26             printf(" }\n");
27         }
28     }
29 
30     return 0;
31 }
32 void init(){
33     int i,j;
34     for(i=0;i<n;i++) vis[i]=0;
35     for(i=0;i<n;i++)
36       for(j=0;j<n;j++){
37           g[i][j]=0;
38       }
39 }
40 void read(){
41     int i,v1,v2;
42      for(i=1;i<=e;i++){
43         scanf("%d %d",&v1,&v2);
44         g[v1][v2]= 1;
45         g[v2][v1]= 1;
46     }
47 }
48 void DFS(int x){
49     int i;
50     vis[x]=1;
51     printf(" %d",x);
52     for(i=0;i<n;i++){
53         if(vis[i]==0 && i!=x && g[x][i]!=0) DFS(i);
54     }
55 
56 }
57 void BFS(int x){
58     int i,queue[MAXN],front,rear,value;
59     front=-1;rear=0;
60     queue[0] = x;
61     vis[x]=1;
62     while(front!=rear){
63         front = (front+1)%MAXN;
64         value = queue[front];
65         printf(" %d",value);
66         for(i=0;i<n;i++){
67             if(i!=value && g[value][i]!=0 && vis[i]==0){
68                 if(((rear+1)%MAXN)==front) break;
69                 else {
70                     rear = (rear+1)%MAXN;
71                     queue[rear] = i;
72                     vis[i]=1;
73                 }
74             }
75         }
76     }
77     
78 }
View Code

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!