Vecteur de vecteur c++

Résolu
mony84 Messages postés 75 Statut Membre -  
mony84 Messages postés 75 Statut Membre -
Bonjour,
je veux écrire un programme qui détecte le nombre de partitions dans un graphe de noeuds.
j'ai utilisé une structure de vecteurs de vecteurs car je ne connais pas à priori la taille des partitions


	int i=k=s=m=_partitionSet= 0;		
	vector <vector<int> > partitions;//vecteur de vecteur
	bool find = false;
		
	while (i< NETWORK_SIZE){	
	m=0;
	
		for (j=0; j< NETWORK_SIZE; j++){		
					
			if (neighbors_matrix_connected[i][j] == 1){
			partitions[_partitionSet][m]=j;
			m++;		
			}
		}
			
		
	i++;
	
	
	k=0;	
		//parcourir ttes les partitions pour vérifier si le noeud appartient dèjà une partition
					
		while ((find == false) && (k <partitions.size())){
		
			while ((find == false) && (s < partitions[k].size())){
			       if (i == partitions[k][s]) {
			       find = true;
}
							
			       s++;
			}
			
		        k++;
		}
		
		
	
	if (find ==true)
	i++;
	else {
	_partitionSet++;
	}
	
	}
	
	


la matrice
neighbors_matrix_connected
est de ce type :

1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 
0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 


2 lignes égales signifie que les 2 noeuds appartiennent à la même parition
et dans une ligne les "1" signifient les noeuds qui appartiennent à la même parition que le noeud (dont le numéro est le numéro de la ligne)
l'erreur :
error: attempt to subscript container with out-of-bounds index 0, but  container only holds 0 elements.


A priori il y a un problème d'indices, mais je n'arrive pas à voir où est ce qu'il est.

Merci pour votre aide

1 réponse

  1. mony84 Messages postés 75 Statut Membre 11
     
    la solution :
    	
    	vector <vector<int> > partitions;
    	vector<int> partitions_intermediary;
    	
    	int i,j,k,s;
    	
    
              bool find = true;// the node is already in a partition = true
    		
    		i=0;					
    	while (i< NETWORK_SIZE){	
    	
    		for (j=0; j< NETWORK_SIZE; j++){		
    					
    			if (neighbors_matrix_connected[i][j] == 1){
    			partitions_intermediary.push_back(j);				
    			}
    			
    		}	
    		
    		partitions.push_back(partitions_intermediary);
    		partitions_intermediary.clear();
    		
            find =true;
    	
    		
    		
    		
    	//////////////delete redundancy
    	
    		i++;
    		
    		//parcourir ttes les partitions						
    		//find funtion return true if i is included 
    		
    		while (find==true){
    		
    		find = false; 
    		
    		
    		 //find funtion return true if i is included 
    			for (k=0 ;k <partitions.size(); k++){		
    				for (s=0 ;s <partitions[k].size(); s++){
    				if (i==partitions[k][s])
    					find =true;			
    				}
    			}
    			
    		//////////////
    	
    		if (find==true){
    		i++;}
    		}
    	
    		
    }
    
    
    
    


    j'espère qu eça pourrait intéresser quelqu'un
    0