Probleme avec un tableau a 3 dimensions

Résolu
tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007 - 23 mai 2006 à 19:30
tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007 - 24 mai 2006 à 16:10
bonjour,

j'utilise un tableau a 3 dimensions dans un procedure. Je ne comprend pas du tout les resultats de l'algo que j'ai implemente.

Je modifie les valeurs du tableau a un endroit (et je fais un cout pour verifier).

Apres cela, j'affiche le tableau final et ils ne correspond plus du tout a ce qui avait ete fait auparavant.


voici une partie de mon code;

Specif;

void cheminUtilisable(int panneI, int panneJ, float *distance,int *parcours, int *chemin);

Code;

void Graphe::cheminUtilisable(int panneI, int panneJ,float *distance,int *parcours, int *chemin)

{

    int u, v;

    int i;

    bool panne;

   

    if(existeArete(panneI,panneJ))

    {

        effacerArete(panneI,panneJ);

        panne = true;   

    }


    for(u=0;u<nbNoeuds;u++)

    {

        for(v=0;v<nbNoeuds;v++)

        {

            for(i=0;i<2;i++)

                chemin[u*nbNoeuds+v*nbNoeuds+i] = -1;

        }

    }


    for(u=0;u<nbNoeuds;u++)

    {

        cout << "***** U : "<< u << endl;

        bellmanFord(u,&distance[0*nbNoeuds+0],&parcours[0*nbNoeuds+0]);

        for(v=0;v<nbNoeuds;v++)

        {

            chemin[u*nbNoeuds+v*nbNoeuds+0] = parcours[v*2+0];

            chemin[u*nbNoeuds+v*nbNoeuds+1] = parcours[v*2+1];

            cout <<
"chemin[" << u << "," << v << ",0] = 
"<<chemin[u*nbNoeuds+v*nbNoeuds+0]; /*pour verif: pas de
probleme*/

            cout <<
" chemin[" << u << "," << v << ",1]=  "
<<chemin[u*nbNoeuds+v*nbNoeuds+1]<< endl;

        }

    }


    cout << endl << "*********RES FINAL**********" <<endl;

    for(u=0;u<nbNoeuds;u++) /*impression du tableau final pour verif; ca ne correspond plus ???*/

    {

        cout << "***** U : "<< u << endl;

        for(v=0;v<nbNoeuds;v++)

        {

            cout <<
"chemin[" << u << "," << v << ",0] = 
"<<chemin[u*nbNoeuds+v*nbNoeuds+0];

            cout <<
" chemin[" << u << "," << v << ",1]=  "
<<chemin[u*nbNoeuds+v*nbNoeuds+1]<< endl;

        }

    }

    cout << endl <<endl;

    if(panne)

        ajouterArete(panneI,panneJ);

}


Pouvez-vous m'orienter sur ce probleme? De plus, je ne suis pas certain de la syntaxe qui me permet d'acceder a mon tableau;

chemin[nbNoeuds][nbNoeuds][2];

chemin[u][v][0] = chemin[u*nbNoeuds+v*nbNoeuds+0];


Merci

Thomas

4 réponses

tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007
24 mai 2006 à 16:10
Merci pour ta réponse. J'ai résolu le problème comme celà:
chemin[u][v][w] = chemin[u*2*nbNoeuds + v*2 + w];
Voilà,
merci encore
Thomas
3
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
23 mai 2006 à 19:43
utilise les crochets; chemin[x][y][z]

-=-= ExCRT =-=-
0
tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007
23 mai 2006 à 19:48
merci,

cette methode ne fonctionne pas.

De plus je l'utilise pour un tableau a 2 dimensions dans une autre methode sans aucun probleme
0
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
24 mai 2006 à 16:06
une petite « relecture » est toujours utile(je parles pour moi)

void cheminUtilisable(int panneI, int panneJ, float *distance,int *parcours, int *chemin);
- devrait être:
void cheminUtilisable(int panneI, int panneJ, float *distance,int *parcours, int *** chemin); // <<<<<<<<

un astérix par crochet/dimension « si on veut ... »

  for (x = 0; x < X_MAX; x++) {
    for (y = 0; y < Y_MAX; y++) {
      for (z = 0; z < Z_MAX; z++) {
        chemin[x][y][z] = (x * y) + z;
      }
    }
  }

-=-= ExCRT =-=-
0
Rejoignez-nous