[Algo]Graphe
Hors ligneK@dor Le 14/05/2006 à 21:42 Profil de K@dor Configuration de K@dor

coucou747 a écrit :
noeud est un lien entre deux adresses, dans un arbre, les noeuds sont à sens uniques, et t'as qu'un seul chemin pour aller d'un point à un autre...



là c'est différent, avec un traceroute, t'as au moins deux chemins pour pouvoir prévennir les panes...



donc, t'associe un id à chaque adresse (mais bon, ça pourrait être l'adresse en elle même, j'ai mis un id pour que tu puisses ajouter des détails genre protocols ect...)

et ensuite, t'as des coeuds (les chemins...) qui relient deux adresses, donc deux id... avec une certaine vitesse (le ping)

En faite, dans mon problème , il me faut garder uniquement l'adresse IP des traceroute, je n'ai pas besoin des temps de réponse ni des noms DNS
C'est pourquoi j'utilise l'option -n du traceroute, que je parserais pour récupérer les adresses IP qu'il me faudra pour créer le graphe d'internet.

Je crois que je me suis mal exprimé.

Je ne vois pas très bien comment se fera l'insertion d'une nouvelle IP dans le graphe.
Hors ligneInvité Le 15/05/2006 à 18:21 Profil de Invité Configuration de Invité


int idMax;

typedef struct {
int id;
int adresse; //et oui , une adresse, c'est 4 octets...
}adresse;


typedef struct {
int id1, id2;
}noeud;

int addnoeud(int id1, int id2, noeud * liste, int maxnoeud){
liste[maxnoeud].id1=id1;
liste[maxnoeud].id2=id2;
}

int addadresse(int adresse, adresse * adresse, int idmax){
adresse.adresse=adresse;
adresse.id=idmax;
return idmax+1;
}

adresse adresses[65536]; // j'ai trop la flème de faire ça avec des pointeurs... désolé...
noeud noeuds[65536]; // j'ai trop la flème de faire ça avec des pointeurs... désolé...
int maxnoeud=0;
int maxadresse=0;
pour ajouter une adresse : idmax=addadresse(adresse ip, adresses, idmax);
pour ajouter un noeud : maxnoeuds=addnoeur(id1, id2, noeuds, maxnoeuds);
--
Compte invité - devenez membre pour disposer de votre compte personnalisé !
Hors ligneK@dor Le 16/05/2006 à 14:24 Profil de K@dor Configuration de K@dor

Bonjour,


j'ai écrit ces quelques fonctions pour pouvoir ajouter des sommets et des arcs dans un graphe.

ESt-ce que vous pourriez m'indiquer comment modifier le code pour que je puisse savoir quelles adresses IP est le sommet d'un autre



Merci

Voici mon code :


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



typedef struct cellule{
  int val;
  struct cellule *next;
}Cellule;
typedef Cellule *Liste;

typedef struct graphe{
  int size;
  Liste *adj;
}Graphe;

Cellule *CreerCellule(int val){
  Cellule *c = (Cellule*)malloc(sizeof(Cellule));
  if(c == NULL)
    return NULL;
  
  c->val = val;
  c->next = NULL;
  
  return c;
}


Liste consListe(int val, Liste liste)
{
  Liste parcours ;
  Cellule* c = CreerCellule(val);
  
  if (!c) return NULL ;
  
  if ( liste == NULL )
    {
      c->next = NULL ;
      return c ;
    }
  
  for(parcours=liste; parcours->next; parcours=parcours->next ) ;
  
  parcours->next = c ;
  return liste;
}


Graphe *consGraph(int size){
  int i;

  Graphe *g = (Graphe*)malloc(sizeof(Graphe));
  if(g == NULL)
    return NULL;
  
  g->size = size;
  
  if(size > 0)
    g->adj = (Liste*)malloc(size*sizeof(Liste));
  else
    g->adj = NULL;
  
  for(i=0; i<size; i++)
    g->adj[i] = NULL;
  
  return g;
}

void addEdge(Graphe *g, int source, int dest){
  g->adj[source] = consListe(dest, g->adj[source]);
}

int main(void)
{
  int i ; Liste parcours ;
  Graphe *g = NULL;
  g = consGraph(3);
  
  addEdge(g,0,1);
  addEdge(g,0,2);
  addEdge(g,1,2);
  
  for( i=0; i<g->size; i++ )
    {
      printf( "Sommet %d :", i );
      for( parcours=g->adj[i]; parcours; parcours=parcours->next )
     printf( " %d", parcours->val ) ;
      printf ("\n" ) ;
    }
  return 0;
}

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels