首页 > 试题广场 >

则输出为( )

[单选题]
#include<bits/stdc++.h>
using namespace std;
vector<int>g[10];
int ans = 0;
void dfs(int x){
if(g[x].size() == 0){
ans++;
return;
}
for(int i = 0; i < g[x].size(); ++i){
dfs(g[x][i]);
}
}
int main(){
int n, x;
scanf("%d", &n);
for(int i = 2; i <= n; ++i){
scanf("%d", &x);
g[x].push_back(i);
}
dfs(1);
cout<<ans<<endl;
return 0;
}
上述程序的输入为:
9
1 2 2 1 5 6 6 6
则输出为( )
  • 4
  • 5
  • 6
  • 7
关键点在vextor<int>g[10],我们理解为这定义了10个vector数组,所以在输入的时候,我们得到, g[1]保存了2,5; g[2]保存了3,4 g[5]保存了6 g[6]保存了7,8,9,其余g[]的size均为0 所以进入dfs(x)函数时,当x对应的g[x]数组size为0时,ans+1; 若数组不空,则会对该数组每个元素都调用dfs函数,所以我们可以判定ans的值为所有数组元素x中对应的g[x]为空的个数,即3,4,7,8,9。有五个</int>
发表于 2019-09-29 22:35:10 回复(0)
求解
发表于 2019-09-15 23:07:34 回复(0)