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]){
aucune raison de ne pas utiliser un std :: tableau ou std :: vecteur au lieu d'un tableau C? – Hayt
Non, le problème est avec l'ensemble A. –
codehungry95
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