salut voila j'ai fais un programme avec le langage c++ dans le but de ce programme et parcourir un graphe et faire des calcule et la recherche des composantes connexe dans le graphe alors le calcule de l'intersection entre 2 tableaux ne marche pas c-a-d le calcule est faux voila mon programme aidez moi a résoudre le problème merci


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <cstdlib>
#include <iostream>
#define N 5
/* ce programme calcule la compante connexe du sommet d'un graphe.
   le graphe est stocké en utilisant la représentation version
   dictionnaire il sera stocké dans un tableau de dimension N*N.
   N étant le nombre de sommet du graphe.*/
int comp();
int lecture(void); //fonction de lecture du graphe
int affi(void);   //fonction d'affichage du graphe
int x[N][N],     //tableau des sommets
    result[N+1],
    rp[N], //tableau de la composante connexe positive
    rn[N], //tableau de la composante connexe negative
    pos,neg,  //indice de fin des tableaux X+ et X-
    verif[N+1],  //tableau pour verifier tout le graphe
    ajout,    //position d'ajout dans le tableau des résultats
    k,i,j,       //indice de recherche dans le tableau des résultats
    a;       //sommet dont on cherche la composante connexe 
 
 
using namespace std;
 
int main(int argc, char *argv[])
{
    printf("\n\ttapez les sommets tel qu'il existe un arc sortant du point");
    lecture();
    int e=1;
 
    {
 
        printf("\n\n\ttapez le num du sommet dont on cherche la composante connexe:  ");
        scanf("%i",&a);
        a--;
        //calcul de X+ tous les sommets x tel qu'il existe un chemin de x vers a
        comp();   
        pos=k;
        printf("\n\tpos = %i\n",pos);
        printf("\n\n les sommets ayant une chaine de a vres  sont:\n");
        for(i=0;i<k;i++){
            rp[i]=result[i];
            printf(" %i.",rp[i]+1);
        }
        printf("\n\ttapez les sommets tel qu'il existe un arc entrant vers le point");
        lecture();
 
        //calcul de X- tous les sommets x tel qu'il existe un chemin de x vers a
        comp();
        neg=k;
        printf("\n\tneg = %i\n",neg);
        printf("\n\n les sommets ayant une chaine de a vres  sont:\n");
        for(i=0;i<k;i++){
            rn[i]=result[i];
            printf(" %i.",rn[i]+1);
        }
 
 
        e++;
        printf("\n\n");printf("\n\n");
 
  // -------------------------on réalise l'intersection entre les deux tableaux
        result[0]=a;
        k=1;
        for(i=0;i<pos;i++){
            a=1;
            for(j=0;(j<neg)&&(a);j++){
                if(rp[i]==rn[j]){
                a=0;
                result[k]=rp[i];
                k++;
            }
                                                           }
        }                           
 
 
 
    affi();
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
//--------------------------pour lire le graphe
 
int lecture()
{
    int i,j,p;
    for(j=0;j<N;j++)for(i=0;i<N;i++)x[i][j]=0;
    printf("\n");
    for(i=0;i<N;i++)
    {
        printf("\n\ntapez pour le point: %i     (pour finir tapez -1)\n\n",i+1);                         
        do {
            scanf("\n%i",&p);
            if(p!=-1){
                x[i][p-1]=1;
            }
        }while(p!=-1);
    }
    return 0;                 
}
 
 
 
//----------------------------------------------pour afficher le résultat
 
int affi(void)
{
    printf("\n\n le résultat est:\n");
    for(i=0;i<k;i++)printf("__%i__",result[i]+1);
    return 0;
}
 
//calcule la composante connexe pur le point a entré à l'écran
int comp()
{
 
 
 
    //initialisation des paramètres
    k=0;
    ajout=1;
    for(i=0;i<N;i++)result[i]=0;
    for(i=0;i<N;i++)verif[i]=1;
    result[0]=a;
    verif[a]=0;
    while(k!=ajout)
    {
        for(i=0;i<N;i++)
        {
            if((x[result[k]][i])&&(verif[i]))
            {
                result[ajout]=i;
                ajout++;
            }
        }   
        verif[result[k]]=0;
        k++;
    }
    return 1;
}