Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void dfs(int v) {
- used[v] = true;
- comps.back().push_back(v);
- for (int u = 0; u < n; u++) {
- if ((graph[v][u] == 1) && (!used[u])) {
- dfs(u);
- }
- }
- }
- int FindMaxComponent() {
- int max = 0;
- int num_max = -1;
- for (int i = 0; i < n; i++)
- used[i] = false;
- for (int i = 0; i < n; i++) {
- if (!used[i]) {
- comps.push_back(vector<int>());
- dfs(i);
- }
- if (comps.back().size() > max) {
- max = comps.back().size();
- num_max = i;
- }
- }
- return num_max;
- }
- int FindDiametr() {
- int max = 0;
- queue<int> que;
- int d[n];
- for (int i = 0; i < n; i++)
- d[i] = -1;
- int num_max = FindMaxComponent();
- que.push(num_max);
- d[num_max] = 0;
- while (!que.empty()) {
- int v = que.front();
- que.pop();
- for (int i = 0; i < n; i++) {
- if ((d[i] == -1) && (graph[v][i] == 1)) {
- que.push(i);
- d[i] = d[v] + 1;
- }
- }
- }
- for (int i = 0; i < n; i++)
- if (d[i] > max)
- max = d[i];
- return max;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement