标签:des style blog io color os sp for strong
输入一个简单无向图,求出图中连通块的数目。
输入的第一行包含两个整数n和m,n是图的顶点数,m是边数。1<=n<=1000,0<=m<=10000。
单独一行输出连通块的数目。
5 3 1 2 1 3 2 4
2
思路:
利用广度搜索,计算广度搜索的次数即为结果。
具体代码如下:
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 5 bool path[1001][1001]; 6 bool visited[1001]; 7 8 int main() { 9 int n, m; 10 cin >> n >> m; 11 12 for (int i = 0; i < m; i++) { 13 int node1, node2; 14 cin >> node1 >> node2; 15 path[node1][node2] = true; 16 path[node2][node1] = true; 17 } 18 19 for (int i = 1; i <= n; i++) { 20 visited[i] = false; 21 } 22 23 int count = 0; 24 int temp = n; 25 while (temp--) { 26 queue<int> store; 27 for (int i = 1; i <= n; i++) { 28 if (!visited[i]) { 29 store.push(i); 30 count++; 31 visited[i] = true; 32 break; 33 } 34 } 35 36 while (!store.empty()) { 37 for (int i = 1; i <= n; i++) { 38 if (path[store.front()][i] && !visited[i]) { 39 store.push(i); 40 visited[i] = true; 41 } 42 } 43 store.pop(); 44 } 45 } 46 47 cout << count << endl; 48 49 return 0; 50 }
Sicily connect components in undirected graph
标签:des style blog io color os sp for strong
原文地址:http://www.cnblogs.com/winray/p/4152331.html