再帰関数 EX20 - 報告書の枚数
解決したいこと
以下の問題を解く再起関数がうまく動かず、なぜエラーが起きているのかわかりません。
問題文
あなたはA社を経営する社長です。 A社はN個の組織からなり、それぞれに0番からN−1番の番号が付いています。 0番の番号が付いた組織はトップの組織です。
組織間には親子関係があり、0番以外のN−1個の組織には必ず1つの親組織があります。 子組織は複数になることがあります。 また、それぞれの組織は直接的または間接的にトップの組織と関係があるものとします。
あなたは全ての組織に報告書を提出するように求めました。 混雑を避けるために、「各組織は子組織の報告書がそろったら、自身の報告書を加えて親組織に渡す」ことを繰り返します。 子組織が無いような組織はすぐに親組織に報告書を渡します。 トップの組織は子組織の報告書がそろったら、自身の報告書を加えて社長に提出します。
それぞれの組織が1枚の報告書を提出します。
各組織について、「その組織が親組織に提出することになる報告書の枚数」を出力するプログラムを作成してください。 ただしトップの組織については「社長に提出する報告書の枚数」を出力してください。
発生している問題・エラー
./Main.cpp: In function ‘int counte(std::vector >&, int)’:
./Main.cpp:29:19: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
29 | for(int j=0; j < vec2.at(i).size(); j++){
| ~~^~~~~~~~~~~~~~~~~~~
./Main.cpp:30:41: error: call of overloaded ‘counte(std::vector >&, __gnu_cxx::__alloc_traits, int>::value_type&)’ is ambiguous
30 | s += counte(vec2, vec2.at(i).at(j));
| ^
./Main.cpp:4:5: note: candidate: ‘int counte(std::vector >, int)’
4 | int counte(vector> vec2, int i);
| ^~~~~~
./Main.cpp:25:7: note: candidate: ‘int counte(std::vector >&, int)’
25 | int counte(vector> &vec2, int i){
| ^~~~~~
該当するソースコード
C++
ソースコードを入力
#include
using namespace std;
int count(vector> vec2, int i);
int main() {
int N;
cin >> N;
vector vec(N);
vec.at(0)=-1;
for(int i=1; i> vec.at(i);
vector> vec2(N);
for(int i=0; i<N; i++){
for(int j=1; j<N; j++){
if(vec.at(j)==i){
vec2.at(i).push_back(j);
}
}
}
cout << count(vec2, 0) << endl;
}
int count(vector> &vec2, int i){
int s=0;
if(vec2.at(i).size()==0) return 1;
for(int j=0; j < vec2.at(i).size(); j++){
s += count(vec2, vec2.at(i).at(j));
}
return s+1;
}
すみません何故か int countの引数の型vector vector intがうまく表示されません。
自分で試したこと
for(int j=0; j < vec2.at(i).size(); j++)でエラーが出ているのですが、何が間違っているのかがわかりません。。