Передача по ссылке на правильность функции - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю над задачей обхода графа, и у меня есть три переменные, которые я хотел бы передать в качестве аргументов, которые должны быть изменены внутри функции, чтобы после завершения выполнения функции значения, на которые ссылаются эти ссылки, теперь изменились(по функции).Этими 3 переменными являются: max, minnd и cnt.В функции dfs () вы можете видеть, как я передал их по ссылке. Это мой первый проход по ссылке. Мой вопрос: правильно ли я передал ссылки, и является ли моя идея передать по ссылке, чтобы изменить внешнюю переменную, как это сделать? (МОЙ КОД НИЖЕ)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int numv, nume, totd = 0, toti = 0;
vector<pair<int, vector<int> > > list;
bool seen[100002];
vector<int> lit;

void dfs(int v, int &max, int &minnd, int &injcnt)
{
    for (int i = 0; i < list[v].second.size(); i++)
    {
        if (!seen[list[v].second[i]])
        {
            seen[list[v].second[i]] = true;
            if (list[v].first >= max)
            {
                max = list[v].first;
                if (v < minnd) minnd = v;
            }
            injcnt++;
            dfs(list[v].second[i], max, minnd, injcnt);
        }
    }
}

int main()
{
    list.resize(100002);
    cin >> numv >> nume;
    for (int i = 1; i <= numv; i++)
    {
        cin >> list[i].first;
        seen[i] = false;
    }
    for (int i = 1; i <= nume; i++)
    {
        int v1, v2;
        cin >> v1 >> v2;
        list[v1].second.push_back(v2);
        list[v2].second.push_back(v1);
    }
    for (int i = 1; i <= numv; i++)
    {
        if (!seen[i])
        {
            seen[i] = true;
            int max = 0, minnd = -1, cnt = 0;
            dfs(i, max, minnd, cnt);
            totd += max;
            toti += cnt;
            lit.push_back(minnd);
        }
    }
    sort(lit.begin(), lit.end());
    cout << totd << " " << toti << "\n";
    vector<int>::iterator it;
    for (it = lit.begin(); it != lit.end(); it++)
        cout << *it << " ";
    cout << "\n";
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...