私は、Nの隣接リストの形で格納された重み付きツリーを持っています。私はM個のノードのリストを持っています。プログラムがコンパイルされないと、次のようにエラーがあるC++:ツリー内の各ノードのペア間の距離を計算するためのBFS
using namespace std;
#define MAX_N (1<<17)
#define MAX_V (1<<17)
typedef pair<int,int> pii;
vector<pii> adj[MAX_V];
bool vis[MAX_N]; //mark the node if visited
ll bfs(pii s,pii d)
{
queue <pii> q;
q.push(s);
ll dist=0;
vis[ s.first ] = true;
while(!q.empty())
{
pii p = q.front();
q.pop();
for(auto i = 0 ; i < adj[ p ].size() ; i++)
{
if(vis[ adj[ p ][ i ].first ] == false)
{
q.push(adj[ p ][ i ].first);
vis[ adj[ p ][ i ] ] = true;
dist += adj[p][i].second;
}
}
}
return dist;
}
int main()
{
for(int i=0;i<N;i++)
{
int v1,v2,l;
cin>>v1>>v2>>l;
adj[v1].push_back(make_pair(v2,l));
// adj[v2].push_back(make_pair(v1,l));
}
int a[M];
for(int i=0;i<M;i++)
cin >> a[i];
int ans=0;
for(int i=0;i<M-1;i++)
{
for(int j=i+1;j<M;j++)
{
num += bfs(adj[a[i]],adj[a[j]]);
}
}
}
:
could not convert 'adj[a[i]]' from 'std::vector<std::pair<long long int, long long int> >' to 'pii {aka std::pair<long long int, long long int>}'
num += bfs(adj[a[i]],adj[a[j]]);
私がこれを書いたこのツリーのMノードのリストからノードのすべてのペア間の距離を計算するために、今すぐ
また、デスティネーション頂点に到達しても停止していないので、このプログラムは間違っていることがわかります。
これらのエラーを修正するのに助けてくれる人がいますか?
'bfs'はパラメータとして' pii'を想定しています。 'pii'は' pair 'です。 'adj'は'ベクトル 'の配列です。したがって、 'adj [i]'は 'ベクトル'であり、 'pii'を期待する関数の引数として使っています。 –
Gonmator