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