sicily 4378 connected components in undirected graph

题意:求图中的连通块数,注意孤立的算自连通!

         例如:6个顶点3条路径,其中路径为:1->2    4->5  1->3

                  那么有(1-2&&1->3) + (4->5) + (6) 共3个连通块!

解法:对每个节点宽搜!

 

 1 #include<iostream>
 2 #include<memory.h>
 3 #include<queue>
 4 
 5 using namespace std;
 6 
 7 bool roads[1001][1001];
 8 bool visited[1001];
 9 int N,M;
10 
11 int main(){
12 
13     cin >>N >>M;
14     memset(roads,0,sizeof(roads));
15     memset(visited,false,sizeof(visited));
16     int from,dest;    
17     for(int i=1; i<=M; i++){
18         cin >> from >> dest;
19         roads[from][dest] = true;
20         roads[dest][from] = true;
21     }
22 
23     queue<int> check;
24     int num = 0;
25     int cnt = 0;
26     int i;
27     //breadth-frist search
28     while(num != N){
29         for( i=1; i<=N;i++){
30             if(visited[i]== false){
31                 check.push(i);
32                 visited[i]= true;
33                 num++;
34                 cnt++;
35                 break;
36             }
37         }
38         while(!check.empty()){
39             i = check.front();
40             for(int j = 1; j<=N;j++){
41                 if(roads[i][j] == true && visited[j] == false){            
42                     check.push(j);
43                     visited[j] = true;
44                     num++;
45                 }
46             }
47             // erase the front node
48             check.pop();
49         }
50     }
51     cout << cnt <<endl;
52     return 0;
53 }

 

 

posted @ 2014-01-11 22:14  shaoshuai1990  阅读(278)  评论(0编辑  收藏  举报