1+ #include < iostream>
2+ #include < vector>
3+
4+ /*
5+ Найти количество компонент связности неориентированного графа при помощи поиска в глубину.
6+
7+ Формат входных данных:
8+ На вход подаётся описание графа. В первой строке указаны два натуральных числа, разделенные
9+ пробелом: число вершин v≤1000 и число рёбер e≤1000. В следующих e строках содержатся описания
10+ рёбер. Каждое ребро задаётся разделённой пробелом парой номеров вершин, которые это ребро
11+ соединяет. Считается, что вершины графа пронумерованы числами от 1 до v.
12+
13+ Формат выходных данных:
14+
15+ Одно число — количество компонент связности графа.
16+
17+ Sample Input 1:
18+
19+ 4 2
20+ 1 2
21+ 3 2
22+ Sample Output 1:
23+
24+ 2
25+ Sample Input 2:
26+
27+ 4 3
28+ 1 2
29+ 3 2
30+ 4 3
31+ Sample Output 2:
32+
33+ 1
34+ */
35+ void dfs (int i, std::vector<bool > &v, int adj[][2 ], int max)
36+ {
37+
38+ v[i] = true ;
39+
40+ for (int j = 1 ; j < max; ++j)
41+ {
42+ if (adj[j][0 ] == adj[j][1 ] && adj[j][1 ] == i)
43+ return ;
44+ if (adj[j][0 ] == i || adj[j][1 ] == i)
45+ {
46+ if (!v[adj[j][0 ]])
47+ dfs (adj[j][0 ], v, adj, max);
48+ else if (!v[adj[j][1 ]])
49+ dfs (adj[j][1 ], v, adj, max);
50+ }
51+ }
52+ }
53+
54+ int main (void )
55+ {
56+ int v = 0 ;
57+ int e = 0 ;
58+
59+ std::cin >> v >> e;
60+ if (v < 0 || e < 0 )
61+ return 1 ;
62+ else if (v == 0 || e == 0 )
63+ {
64+ std::cout << v << std::endl;
65+ return 0 ;
66+ }
67+ ++v;
68+ ++e;
69+
70+ std::vector<bool > ver (v);
71+
72+ for (bool i : ver)
73+ i = false ;
74+
75+ int adj[e][2 ];
76+
77+ adj[0 ][0 ] = 0 ;
78+ adj[0 ][1 ] = 0 ;
79+ for (int j = 1 ; j < e; ++j)
80+ std::cin >> adj[j][0 ] >> adj[j][1 ];
81+
82+ int res = 0 ;
83+ int j = 1 ;
84+ while (j < ver.size ())
85+ {
86+ if (j < ver.size () && ver[j])
87+ {
88+ while (j < ver.size () && ver[j])
89+ ++j;
90+ ++res;
91+ }
92+ else /* if (j < ver.size() && !ver[j])*/
93+ {
94+ dfs (j, ver, adj, e);
95+ while (j < ver.size () && ver[j])
96+ ++j;
97+ ++res;
98+ }
99+ }
100+ std::cout << res << std::endl;
101+ return 0 ;
102+ }
0 commit comments