通过引用函数正确性

时间:2018-09-23 17:14:07

标签: c++ pass-by-reference depth-first-search

我正在执行图形遍历任务,我想将三个变量作为参数传递给函数,以便在函数内进行修改,以便在函数执行完后,现在更改这些引用所引用的值(通过功能)。这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;
}

0 个答案:

没有答案