2016-09-13 1 views
-1

La fonction dfs() de ce programme fonctionne sur l'ensemble A & matrice C. Le programme fonctionne correctement lorsque A et int C [MAX] sont déclarés globaux. Mais lorsque j'essaie d'utiliser ce programme plusieurs fois, les ensembles A et C sont initialisés avec les valeurs des cas de test précédents, ce qui donne une mauvaise sortie. Comment puis-je faire ce programme pour accepter de nouvelles valeurs dans A & C pour chaque cas suivant. Note: Ce programme est destiné à trouver si le graphe avec n nombre de nœuds et m nombre d'arêtes est bipartite ou non.Comment puis-je passer un ensemble <int> var à une fonction?

#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);  
} 

Si je change mon code pour quelque chose comme ci-dessus. Je reçois l'erreur suivante.

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

aucune raison de ne pas utiliser un std :: tableau ou std :: vecteur au lieu d'un tableau C? – Hayt

+0

Non, le problème est avec l'ensemble A. – codehungry95

+0

Je sais que c'est juste un conseil général. vous pouvez évidemment utiliser C++. il n'y a pas de raison pour les tableaux. Aussi: pouvez-vous nettoyer votre code et ne laisser que dans les parties qui sont importantes pour la question? Que se passe-t-il si vous passez simplement l'ensemble en tant que paramètre dans la fonction? quelles sont les erreurs? – Hayt

Répondre

0

Selon le C++ doc, set - C++ Reference il n'y a pas tel operator[] en sorte que votre std::set<>for(int y:A[x]) est faux. Vous ne pouvez pas appeler A[x].

Je vous recommande d'utiliser un vector ou un autre récipient répondant à vos besoins au lieu d'un std::set