выражение должно иметь тип класса в векторах C ++ - PullRequest
0 голосов
/ 06 апреля 2020

Моя программа выдает неправильный вывод для тестовых случаев, отличных от 1. Я понял, что должен изменить значения каждого элемента в vec и посещении на 0. Я могу сделать это для посещенных, но получаю ошибку для vec.

#include <bits/stdc++.h>
using namespace std;
vector <int> vec[100001];
int visited[100001];

void dfs(int node)
{
    visited[node] = 1;
    for (int child : vec[node])
    {
        if (!visited[child])
            dfs(child);
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        int n, e, a, b;
        cin >> n;
        cin >> e;
        for (int i = 0; i < e; ++i)
        {
            cin >> a >> b;
            vec[a].push_back(b);
            vec[b].push_back(a);
        }
        long long c = 0;
        for (int i = 0; i < n; ++i)
        {
            if (!visited[i])
            {
                dfs(i);
                ++c;
            }
        }
        cout << c << '\n';
        memset(visited, 0, sizeof(visited));
        fill(vec.begin(), vec.end(), 0);
    }
}

Я использовал memset() для посещенных и fill() для ве c. Как решить эту проблему? Ввод:

2
4
2
0 1
0 2
8
0

Ожидаемый вывод:

2
8

Выход:

CC.cpp: In function 'int main()':
CC.cpp:47:18: error: request for member 'begin' in 'vec', which is of non-class type 'std::vector<int> [100001]'
         fill(vec.begin(), vec.end(), 0);
                  ^
CC.cpp:47:31: error: request for member 'end' in 'vec', which is of non-class type 'std::vector<int> [100001]'
         fill(vec.begin(), vec.end(), 0);

Если удалить строку с fill(): Выход:

2
6

Программа для определения количества подключенных компонентов на графике.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

fill(vec.begin(), vec.end(), 0);

В этой строке проблема. vec - массив векторов. Это массив. У него нет функций begin () и end (), как у вектора.

У вас есть массив из 100001 векторов, которые вы хотите очистить. Просто переберите массив векторов и очистите () каждый вектор.

Обратите внимание, что заполнение нулями - это не то же самое, что очистка. Но я совершенно уверен, что вы хотите очистить векторы

0 голосов
/ 06 апреля 2020

строка 45, ваш vec является набором vector<int> экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...