私は非循環有向グラフで最長の経路を見つけるためにTopCoderでproblemを行っていました。私は訪問頂点のために型bool型のベクトルを使用しました。しかし、それは私に(以下のコードで強調表示)これらのエラーを与えている:bool型のベクトルにtrueまたはfalseを代入すると、下のプログラムでエラーが表示されるのはなぜですか?
error: no match for ‘operator=’ (operand types are ‘std::vector<bool>’ and ‘bool’)
visited[cur_ver]=true;
error: no match for ‘operator==’ (operand types are ‘std::vector<bool>’ and ‘bool’)
if(visited[i]==false)
ここに私のコードです:あなたは、組み込みの配列構文とstd::vector<T>
クラスの構文を混乱さ
#include<bits/stdc++.h>
using namespace std;
class Circuits{
vector<int>adj[51];
vector<int>cost[51];
vector<int>T[51];
vector<bool>visited[51];
vector<int>dist[51];
int glm=0;
public:
void topological_sorting(int cur_ver,int n){
visited[cur_ver]=true; //error 1
for(int i=0;i<adj[cur_ver].size();i++){
if(visited[i]==false) //error 2
topological_sorting(i);
}
T.insert(T.begin(),cur_ver);
}
void Longest_Path(int s,int n){
for(int i=0;i<=n;i++)
dist[i]=NINF;
dist[s]=0;
for(int i=0;i<=n;i++){
int u=T[i]
if(dist[u]!=NINF)
for(int j=0;j<adj[i].size();j++){
int v=adj[u][j];
if(dist[v]<dist[u]+cost[u][v])
dist[v]=dist[u]+cost[u][v];
}
}
for(int i=0;i<=n;i++)
if(dist[i]>glm)
glm=dist[i];
}
int howLong(vector<string>connects,vector<string>costs){
for(int i=0;i<connects.size();i++){
for(int j=0;j<connects[i].size();j++){
adj[i].push_back(int(connects[i][j]));
cost[i].push_back(int(costs[i][j]));
}
}
int n=connects.size();
for(int i=0;i<=n;i++)
visited[i]=false;
topological_sorting(0,n);
int lm=0;
for(int i=0;i<=n;i++){
Longest_Path(i,n);
if(glm>lm)
lm=glm;
glm=0
}
return lm;
}
};
あなたは、将来の質問のために、整数 –
ヒントに要素を推進している:ダウン疑わしい動作を再現するために必要な最小限のコードに例をカット。意味のあるものは何もする必要はありません。あなたの質問に簡単に答えることができます - そして、あなた自身が問題を見つけ出すことにつながる便利なデバッグテクニックです。 – DevSolar
は関係ありませんが、 '#include'と 'using namespace std; 'の組み合わせを注意してください。最初のものは標準ライブラリ全体を含みます。 2番目のライブラリは 'std'名前空間のすべてを、標準ライブラリのほとんどすべてを取り出し、それをグローバルな名前空間に置きます。そこでは、あなたが書いたものの方法で得ることができます。一緒に使用していない数万の識別子があなたの識別子の中に入り、これは非常に奇妙なエラーメッセージとロジック問題を引き起こします。 –
user4581301