이 프로그램의 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]){
어떤 이유로 대신 귀하의 요구 사항을 충족
vector
또는 다른 컨테이너를 사용하는 것이 좋습니다 것? – Hayt아니요, 문제는 집합입니다. –
codehungry95
나는 이것이 일반적인 조언 일 뿐이라는 것을 알고 있습니다. 당신은 분명히 C++을 사용할 수 있습니다. C 배열에 대한 이유가 없습니다. 또한 : 코드를 정리하고 질문에 중요한 부분 만 남겨 둘 수 있습니까? 집합을 매개 변수로 함수에 전달하면 어떻게됩니까? 오류가 무엇입니까? – Hayt