graphe: représentation par la matrice d'adjacence
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

graphe: représentation par la matrice d'adjacence



  1. #1
    wildo

    graphe: représentation par la matrice d'adjacence


    ------

    Svp si quelqu'un peux me dire pouquoi ce pprogramme me donne rien
    je veux la matrice d'adjacence

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct graphe{ int s;
    int art;
     int **adj;}graphe;
    
    
     graphe*adjmatrice(){
         graphe *G;
         int i,j,k;
         G=(graphe*)malloc(sizeof(graphe));
    
    
         if(G==NULL) {
                return NULL;
                }
    
    
         printf("entrez le nb des noeuds et aretes");
    
         scanf("%d %d,", &G->s,&G->art);
    
    
         G=malloc((G->s*G->s)*sizeof(int));
    
    for (i = 0 ; i < G->s ; i++)
    {
    
        for(j=0;j<G->art;j++)
    
    
    
    
        G->adj[i][j]=0;
    }
    
    
    
    
    
    
    
    for(k=0;j<G->art;k++)
    {
        printf("entrez les deux  nb de noeuds en relation d'arete");
        scanf("%d %d", &i,&j);
       G->adj[i][j]=1;
       G->adj[j][i]=1;
    }
       return G;
    }
    
    
    
    
    
    
    
    
    
    int main()
    {
        printf("Hello world!\n");
    
        graphe*p;
    
        int **q;
        int i,j;
    
        p=adjmatrice() ;
        i=p->s-1;
    
        printf("%p",p);
        printf("Hello world!\n");
        q=p->adj;
        for(i=0 ;i<p->s ; i++)
        {
            for(j=0 ;j<p->s ;j++)
            {
                printf("%d",q[i][j] );
            }
        }
    il y'a aucune erreur et pourtant je ne vois pas ''hello world'', il ne me demande pas d'entrer ''les deux neouds ..'' ?

    cordialement

    -----
    Dernière modification par JPL ; 20/11/2018 à 22h15. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Citation Envoyé par wildo Voir le message
    il y'a aucune erreur
    Si, il manque l'accolade fermante de la fonction main, donc ça ne compile pas, donc l'exécution n'est pas possible.

  3. #3
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    non l'accolade ne manque paq si juste une erreur de copier coller
    maintenant il me donne

    printf("entrez le nb des noeuds et aretes");
    scanf("%d %d,", &G->s,&G->art);

    mais cette partie non
    for(k=0;j<G->art;k++)
    {
    printf("entrez les deux nb de noeuds en relation d'arete");
    scanf("%d %d", &i,&j);
    G->adj[i][j]=1;
    G->adj[j][i]=1;
    }

  4. #4
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Encore une petite erreur dans : scanf("%d %d,", &G->s,&G->art); Il y a une virgule en trop après %d.

    Mais gros problème de conception ici: G=malloc((G->s*G->s)*sizeof(int));
    Tu alloues un nouveau bloc de mémoire à G. Que deviennent les valeurs saisies pour G->s et G->art du coup? Elles deviennent inaccessibles et la mémoire ne pourra jamais plus être libérée. Normal que ta boucle for ne fonctionne plus vu que g->s n'est plus définie.

    Je te conseille d'utiliser un debogueur. Il m'a permis de détecter le problème en moins de 2 minutes sans trop avoir eu besoin de savoir comment fonctionnait ton programme.

  5. A voir en vidéo sur Futura
  6. #5
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    j'assaie de faire Debug mais je n'arrive pas et il me donne ce msg:

    Selecting target:
    Debug
    ERROR: You need to specify a debugger program in the debuggers's settings.
    (For MinGW compilers, it's 'gdb.exe' (without the quotes))
    (For MSVC compilers, it's 'cdb.exe' (without the quotes)


    et quand je vais dans les settings je trouve rien de cbd.xe" ou ''gdb.exe''

  7. #6
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    en tous cas j'ai changé G=malloc(..) par G->adj=... mais tjrs pas de resultat

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct graphe{ int s;
    int art;
    int **adj;}graphe;


    graphe*adjmatrice(){
    graphe *G;
    int i,j,k;
    G=(graphe*)malloc(sizeof(graph e));


    if(G==NULL) {
    return NULL;
    }


    printf("entrez le nb des noeuds et aretes");

    scanf("%d %d", &G->s,&G->art);


    G->adj=malloc((G->s*G->s)*sizeof(int));

    for (i = 0 ; i < G->s ; i++)
    {

    for(j=0;j<G->art;j++)




    G->adj[i][j]=0;
    }







    for(k=0;j<G->art;k++)
    {
    printf("entrez les deux nb de noeuds en relation d'arete");
    scanf("%d %d", &i,&j);
    G->adj[i][j]=1;
    G->adj[j][i]=1;
    }
    return G;
    }









    int main()
    {
    printf("Hello world!\n");

    graphe*p;

    int **q;
    int i,j;

    p=adjmatrice() ;
    i=p->s-1;

    printf("%p",p);
    printf("Hello world!\n");
    q=p->adj;
    for(i=0 ;i<p->s ; i++)
    {
    for(j=0 ;j<p->s ;j++)
    {
    printf("%d",q[i][j] );
    }
    }
    }

  8. #7
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    j'essaie debug maais ne marche pas et voilà le msg qui me donne

    Selecting target:
    Debug
    ERROR: You need to specify a debugger program in the debuggers's settings.
    (For MinGW compilers, it's 'gdb.exe' (without the quotes))
    (For MSVC compilers, it's 'cdb.exe' (without the quotes))

    en tous cas j'ai remplacé G=malloc par G->malloc mais encore rien

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct graphe{ int s;
    int art;
    int **adj;}graphe;


    graphe*adjmatrice(){
    graphe *G;
    int i,j,k;
    G=(graphe*)malloc(sizeof(graph e));


    if(G==NULL) {
    return NULL;
    }


    printf("entrez le nb des noeuds et aretes");

    scanf("%d %d", &G->s,&G->art);


    G->adj=malloc((G->s*G->s)*sizeof(int));

    for (i = 0 ; i < G->s ; i++)
    {

    for(j=0;j<G->art;j++)




    G->adj[i][j]=0;
    }







    for(k=0;j<G->art;k++)
    {
    printf("entrez les deux nb de noeuds en relation d'arete");
    scanf("%d %d", &i,&j);
    G->adj[i][j]=1;
    G->adj[j][i]=1;
    }
    return G;
    }









    int main()
    {
    printf("Hello world!\n");

    graphe*p;

    int **q;
    int i,j;

    p=adjmatrice() ;
    i=p->s-1;

    printf("%p",p);
    printf("Hello world!\n");
    q=p->adj;
    for(i=0 ;i<p->s ; i++)
    {
    for(j=0 ;j<p->s ;j++)
    {
    printf("%d",q[i][j] );
    }
    }
    }


    je pense que l'erreur est dans
    for(k=0;j<G->art;k++)
    {
    printf("entrez les deux nb de noeuds en relation d'arete");
    scanf("%d %d", &i,&j);
    G->adj[i][j]=1;
    G->adj[j][i]=1;
    }
    mais je ne vois pas ou exactement

  9. #8
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Je veux bien regarder, mais il faut aussi y mettre du tien: JPL t'a gentiment mis le code en forme en te précisant comment faire pour la suite, mais tu n'en tiens pas compte.

    Du code mal indenté est vraiment pénible à suivre ...

  10. #9
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    j'essaie debug maais ne marche pas et voilà le msg qui me donne

    Selecting target:
    Debug
    ERROR: You need to specify a debugger program in the debuggers's settings.
    (For MinGW compilers, it's 'gdb.exe' (without the quotes))
    (For MSVC compilers, it's 'cdb.exe' (without the quotes))
    On ne sait rien de l'IDE que tu utilises.

    Pour ma part, c'est visual studio et son debogueur est installé par défaut.

  11. #10
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    j'utilise code blocks et je suis un debutant alors pardonne mon incompétence

  12. #11
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Ca n'empêche en rien de lire les motifs de modification au bas de ton message #1

  13. #12
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct graphe{
         int s;
         int art;
        int **adj;}graphe;
        
    graphe*adjmatrice()
    {
    graphe *G;
    int i,j,k;
    G=(graphe*)malloc(sizeof(graphe));
    
    if(G==NULL) 
        {
          return NULL;
        }
    
    printf("entrez le nb des noeuds et aretes");
    scanf("%d %d", &G->s,&G->art);
    
    G->adj=malloc((G->s*G->s)*sizeof(int));
    
    for (i = 0 ; i < G->s ; i++)
    {
      for(j=0;j<G->art;j++)
        {
          G->adj[i][j]=0;
        }
    }
    for(k=0;j<G->art;k++)
    {
    printf("entrez les deux nb de noeuds en relation d'arete");
    scanf("%d %d", &i,&j);
    G->adj[i][j]=1;
    G->adj[j][i]=1;
    }
    return G;
    }
    
    int main()
    {
      graphe*p;
      int **q;
      int i,j;
    
      p=adjmatrice() ;
      i=p->s-1;
      q=p->adj;
      
      for(i=0 ;i<p->s ; i++)
     {
       for(j=0 ;j<p->s ;j++)
        {
          printf("%d",q[i][j] );
        }
     }
     return 0;
    }
    printf("Hello world!\n");
    
    graphe*p;
    
    int **q;
    int i,j;
    
    p=adjmatrice() ;
    i=p->s-1;
    
    printf("%p",p);
    printf("Hello world!\n");
    q=p->adj;
    for(i=0 ;i<p->s ; i++)
    {
    for(j=0 ;j<p->s ;j++)
    {
    printf("%d",q[i][j] );
    }
    }
    }
    tjrs rien ça m'énerve vraiment hah
    Dernière modification par JPL ; 21/11/2018 à 23h58. Motif: Ajout de la balise Code (#) pour garder l'indentation

  14. #13
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Et voilà ce que ça donne avec une indentation (enfin) correcte
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct graphe{
    	int s;
    	int art;
    	int **adj;
    }graphe;
    
    graphe*adjmatrice()
    {
    	graphe *G;
    	int i, j, k;
    	G = (graphe*)malloc(sizeof(graphe));
    
    	if (G == NULL)
    	{
    		return NULL;
    	}
    
    	printf("entrez le nb des noeuds et aretes");
    	scanf("%d %d", &G->s, &G->art);
    
    	G->adj = malloc((G->s*G->s)*sizeof(int));
    
    	for (i = 0; i < G->s; i++)
    	{
    		for (j = 0; j<G->art; j++)
    		{
    			G->adj[i][j] = 0;
    		}
    	}
    	for (k = 0; j<G->art; k++)
    	{
    		printf("entrez les deux nb de noeuds en relation d'arete");
    		scanf("%d %d", &i, &j);
    		G->adj[i][j] = 1;
    		G->adj[j][i] = 1;
    	}
    	return G;
    }
    
    int main()
    {
    	graphe*p;
    	int **q;
    	int i, j;
    
    	p = adjmatrice();
    	i = p->s - 1;
    	q = p->adj;
    
    	for (i = 0; i<p->s; i++)
    	{
    		for (j = 0; j<p->s; j++)
    		{
    			printf("%d", q[i][j]);
    		}
    	}
    	return 0;
    }
    C'est quoi tout le code que tu as mis après la fin de la fonction main?

    Fais un peu gaffe avant de poster, ou relis-toi.
    Dernière modification par Jack ; 22/11/2018 à 00h12.

  15. #14
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    c'est la constrictions d'un graph p puis l'affichage des élements de **q (q=p->adj)

  16. #15
    Chanur

    Re : graphe: représentation par la matrice d'adjacence

    Bonjour,

    Tu déclares et tu alloues un tableau de pointeurs G->adj, mais tu ne l'initialises pas.
    Donc G->adj[i] vaut NULL (au mieux, parce qu'au pire c'est une valeur aléatoire)
    et donc G->adj[i][j] donne "Erreur de segmentation (core dump)'"
    (ou tout autre message du même acabit suivant ton système et ton compilateur)

    Ce qui ne dépend pas du système, c'est que tu ne peux jamais utiliser un pointeur nul comme si c'était une adresse valide.
    En C, il faudrait que tu commences par allouer G->adj[0], G->adj[1], G->adj[2], etc.

    Là tu crées un tableau linéaire et tu supposes que la machine va deviner la longueur d'une ligne de ton tableau pour interpréter correctement G->graphe[i][j]
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  17. #16
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    merci beaucoup, vous avez raison à cent pour cent maintenant, il travaille juste une dernière chose comment nous faisons l'espace entre les colonnes
    j'ai fait printf("%d",\n) mais il ne sépare que des lignes

  18. #17
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Essaie avec printf("%5d",\n) pour des colonnes de 5 chiffres par exemple.

  19. #18
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    non ca n'a pas marché et en général je saurai le nb de colonnes en exécution

  20. #19
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Dans ton message #16, tu parlais d'espace entre les colonnes. Et maintenant tu parles de nombre de colonnes. Quel est le rapport?

    non ca n'a pas marché
    On pourrait voir le résultat?

    PS: il faut retirer le \n sinon tu auras un saut de ligne à chaque fois.
    Il faut faire un printf("\n"); à la fin de chaque ligne uniquement.

    Bref, il faut faire printf("%5d", q[i][j]) pour chaque colonne.
    Dernière modification par Jack ; 24/11/2018 à 11h15.

  21. #20
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    et bah il m'a donné ca Nom : Sans titre.png
Affichages : 376
Taille : 203,1 Ko

    et en général je ne sais pas si leNom : Sans titre.png
Affichages : 376
Taille : 203,1 Ko nombre des colonnes va etre 5 c'est le nombre des sommets s
    et c'est l'utilisateur qui va le saisir

  22. #21
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    vous voyez le dernier colonne est répété

  23. #22
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Mais c'est quoi ce printf("%d",\n) ???? le %d spécifie que tu vas fournir un entier alors que tu lui fournis un saut de ligne (???)

    Pour un saut de ligne, c'est printf("\n") comme dit dans mon message #19.

  24. #23
    Jack
    Modérateur

    Re : graphe: représentation par la matrice d'adjacence

    Tu devrais tenir compte des warnings qui s'affichent au cas de ton écran: le problème était bien signalé ligne 57.

  25. #24
    wildo

    Re : graphe: représentation par la matrice d'adjacence

    oui c'était ça
    Merci beaucoup

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2016, 10h21
  2. Théorie spectrale de ( matrice Laplaciennet et adjacence)
    Par inviteb2b02abc dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 28/11/2013, 21h52
  3. Représentation graphique d'une matrice
    Par invite269c2e22 dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 01/07/2010, 10h30
  4. Réponses: 1
    Dernier message: 16/09/2009, 19h37
  5. Défi : représentation graphique d'une matrice
    Par invite01600ecc dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 23/02/2007, 06h53