비주기 지향 그래프에서 가장 긴 경로를 찾는 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; '의 조합을주의 깊게 관찰하십시오. 첫 번째 라이브러리는 여러분이 원하거나 필요 이상으로 전체 표준 라이브러리를 포함합니다. 두 번째 라이브러리는'std' 네임 스페이스의 모든 것을 표준 라이브러리의 거의 모든 것을 가져 와서 여러분이 작성하는 물건의 방법으로 얻을 수있는 전역 네임 스페이스에 배치합니다. 함께 사용하지 않는 수만 개의 식별자를 사용하면 자신이 사용하는 식별자를 얻게되며, 이로 인해 매우 이상한 오류 메시지와 논리 문제가 발생할 수 있습니다. –
user4581301