2016-09-13 4 views
-1

이 프로그램의 dfs() 함수는 A 배열 & 집합 C에서 작동합니다. A와 int C [MAX]가 전역으로 선언되면 프로그램이 제대로 작동합니다. 하지만이 프로그램을 여러 번 사용하려고하면 A와 C 세트가 이전 테스트 케이스의 값으로 초기화되어 잘못된 결과가 나옵니다. 어떻게하면이 프로그램이 다음의 모든 경우에 A & C의 새로운 값을 받아들이도록 만들 수 있습니까? 참고 :이 프로그램은 n 개의 노드와 m 개의 가장자리가있는 그래프가 bipartite인지 아닌지를 확인하기위한 것입니다.어떻게 <int> var을 함수로 전달합니까?

#include <bits/stdc++.h> 
    using namespace std; 

    const int MAX=1000000; // maximum number of vertices 

    int dfs(int x,const set<int>& A,int C[]){ 
for(int y:A[x]){ 
    if(C[y]==C[x])return 0;// this means the graph is not bipartite 
    if(C[y]==0){ 
     if(C[x]==1) C[y]=2; 
     else C[y]=1; 
     dfs(y,A,C); 
     return 1; 
    } 
} 
    } 

int main(){ 

int t; 
scanf("%d",&t); 
while(t--) 
{ 
    set<int> A[MAX];// Here, i declare set<int> A and Int C[MAX] in local   scope 
    int C[MAX]; 

    // Passing set<int> A and int C[] to dfs().. 

    int res = dfs(i,A,int C);  
} 

위 코드와 같이 변경하면 다음과 같은 오류가 발생합니다.

prog.cpp: In function 'int dfs(int, const std::set<int>&, int*)': 
prog.cpp:8:16: error: no match for 'operator[]' (operand types are 'const std::set<int>' and 'int')   
for(int y:A[x]){ 
+0

어떤 이유로 대신 귀하의 요구 사항을 충족 vector 또는 다른 컨테이너를 사용하는 것이 좋습니다 것? – Hayt

+0

아니요, 문제는 집합 입니다. – codehungry95

+0

나는 이것이 일반적인 조언 일 뿐이라는 것을 알고 있습니다. 당신은 분명히 C++을 사용할 수 있습니다. C 배열에 대한 이유가 없습니다. 또한 : 코드를 정리하고 질문에 중요한 부분 만 남겨 둘 수 있습니까? 집합을 매개 변수로 함수에 전달하면 어떻게됩니까? 오류가 무엇입니까? – Hayt

답변

0

는 C++ 문서에 따르면, set - C++ Reference은 그래서 당신의 for(int y:A[x])이 잘못되지 같은 operator[]std::set<>에있다. A[x]으로 전화 할 수 없습니다.

내가 대신 C 배열의 표준 : 배열 또는 표준 : : 벡터를 사용하지 않는 std::set

관련 문제