Accueil > Forum > > > > générer un graphe aléatoirement en langage C
générer un graphe aléatoirement en langage C
mardi 21 avril 2009 à 18:42:43 |
générer un graphe aléatoirement en langage C

Iziwschi
|
Bonjour, je suis débutant en algorithmique, j'essaye depuis ce matin de comprendre comment je peux générer un graphe aléatoirement en langace C mais je ne arrive vraiment pas à comprendre la procédure. je sais qu'on peut utilisé matrice adjacent sommets-arc, mais je ne sais pas comment l'implémenter. au faite je n'arrive pas a comprendre comment representer les arcs et les sommets, doit je utiliser un tableau, une structure ... mon bute est de générer un graphe aléatoirement et afficher ce graphe : exemple : soit G(E,V), E = arcs(ou arêtes), et V sommets: V={1,2,3,4,5,6}ensemble des sommets E={(1--2)( 2---3)(3--4)(4--5)(5--2)(6--1)} les arcs existant. Exemple graphe: 1--2 2---3 3--4 4--5 5--2 6--1 merci de me donner une petite astuce ou de m'éclaircir un peu plus sur la procédure à suivre. ----------- julien
|
|
mercredi 22 avril 2009 à 16:58:43 |
Re : générer un graphe aléatoirement en langage C

CptPingu
|
Si tu as une matrice d'adjacence (donc graphe statique), alors c'est extrêmement simple. Il suffit de remplir un tableau a double dimension aléatoirement de 0 ou de 1, si le graphe est orienté, et de remplir aléatoirement la moitié et de l'appliquer par symétrie si celui n'est pas orienté. Si le graphe est dynamique, alors c'est plus compliqué au niveau de l'implémentation, surtout si celui-ci est non-orienté.
|
|
mercredi 22 avril 2009 à 21:43:33 |
Re : générer un graphe aléatoirement en langage C

Iziwschi
|
bonsoir, merci pour ta réponse. ben au faite j'ai bien utilisé une matrice d'adjacence qui est générée aléatoirement . en suite selon la les valeur de la matrice j'ai créé une liste chainée. par contre j'ai juste un petit souci de dédoublement dans la matrice. je me rend compte que les arrêtes créées sont en double càd, j'ai 1--5 et 5--1 vu que la graphe n'est pas orienté ca ne le fait pas.
dans ton message j'ai pas bien compris quand tu dis, " ...remplir aléatoirement la moitié et de l'appliquer par symétrie si celui n'est pas orienté..." ben au faite tu me donne la solution mais je ne comprend pas trop. merci en tout cas d 'avoir pris le temps de me répondre.
|
|
mercredi 22 avril 2009 à 23:42:12 |
Re : générer un graphe aléatoirement en langage C

CptPingu
|
En fait j'ai besoin de plus d'indication pour pouvoir t'aider: - Est-ce un graphe dynamique ou statique ? - Tu dois le représenter en matrice d'adjacence, en liste chaînée, ou tu as le choix ? (Je suppose que c'est en liste chaînée). - Orienté ou non ? (Je suppose que non).
> dans ton message j'ai pas bien compris quand tu dis, " ...remplir > aléatoirement la moitié et de l'appliquer par symétrie si celui n'est pas > orienté..." ben au faite tu me donne la solution mais je ne comprend pas trop.
En fait ce que je voulais te dire, c'est que dans le cas d'un graphe statique et non orienté, il suffit de générer aléatoirement une partie des points de la matrice d'adjacence puis de l'appliquer par symétrie. Un petit dessin pour l'expliquer:
1 2 3 4 5 1 01 1 0 1 2 110 1 0 3 1 001 1 4 0 1 101 5 1 0 1 11
Ici il suffit de générer aléatoirement la partie rouge et bleu et il est alors facile de deviner la partie verte, par symétrie.
|
|
jeudi 23 avril 2009 à 00:59:24 |
Re : générer un graphe aléatoirement en langage C

Iziwschi
|
bonsoir, plus exactement ce que je cherche a implémenter c'est l 'algorithme de Erdös et rényi.on se fixe un nbr n=|V| de sommet et il existe une arête entre deux sommet u,et v avec une probabilité p . cette proba est la même pour toutes les arêtes.
le graphe est apparemment non orieneté. j'ai utilisé donc une matrice d'adjacence . mais pour les arrete j'utilise une liste chainée .
je me suis basé sur cette structure,
typedef struct arete { int sommet; struct arete * next; }ARETE;
ARETE *adjacence;
voici ce que j'ai codé jusqu'a maintenant. ce code n'est pas encore compilé. j'éspere que c 'esr pas trop long et surtout je prend pas trop de ton temps. merci
********************************************************************************* ********************************************************************************* #include <stdlib.h> #include <stdio.h> #include <sys/time.h> #include "graph.h"
N=rand_entier (n) //revoie entier entre 0 et n arrete *genere_G_Erdos_renyi() {
int tabGraphe [N][N]; arrete * adjacente; matrice_adj=inti_graphe(tabGraphe);// matrice d'adjacence
adjacente = transphormMatrice (matrice_adj);// ici on recuppere nos arrtes créées selon matrice adjacence
return adjacente; } // fin de la fonction genere G Erdos renyi
int inti_graphe(tab_graphe[N][N]) // on creer notre matrice d'adjacence aléatoirement { int i, j , v_matrice; for (i = 0 ; i<=N ; i++) { for (j = i ; j <= N ; j ++) { v_matrice = rand01 (); // on suppose que ici la proba p que sommet i et j forme arete i--j if (v_matrice>0) tab_graphe [i][j] = 1; else{ tab_graphe [i][j] = 0; } } } return tab_graph[i][j]; }
arrete *transphormMartrice (int tab_graphe[N][N]) // ici on passera le tableau(matrice ) renvoyé par la fonction init_graphe { int i, j,countr=0; arrete *arrete_debut, *temp *arrete_nouvelle;
arrete_debut=creeUneArrete(1,rand_entier(n));// on effecte 1 la valeur du premier sommet avec son poinds, ici rand_entier() // ici on suppose qu'il existe une arrete de depart for (i = 0 ; i<=N ; i++) { for (j = i ; j <= N ; j ++) { if (tab_graphe [j][i] > 0)// ££ { //if (countr == 0) { temp = creeUneArrete (j, rand_entier()); // quand ££ vaut 1 on cree une nouvelle arete on assigne son // au point temp arrete_debut->suiv = temp; } temp->suvi=arrete_nouvelle; } else { temp = creeUneArrete (j, rand_entier); arrete_nouvelle->suiv = temp; } } }// fin de l boucle for de j }// fin de l boucle for de i
return arrete_debut; }// fin de la fonction transphorm matrice ***************************************************************** *****************************************************************
|
|
Cette discussion est classée dans : graphe, générer, comprendre, sommets, aléatoirement
Répondre à ce message
Sujets en rapport avec ce message
implémentation [ par twistakarima ]
Bonjour, je suis un étudiant en l'informatique ,j'ai un mini_projet a faire,mais je ne sais pas comment commencer, j'essaye depuis ce matin de compren
Générer des messages aléatoirement [ par greg515 ]
Voilà je cherche à générer dans une fenetre windows des textes prédéfinis avec un bouton "ok" que ces messages s'affichent avec un certain temps de ba
Générer des Caractèeres aléatoirement [ par cricri_b34 ]
Jaimerais apprendra comment générer des caractères aléatoirement:Pour générer des nombre, j'utilise:rand() % 100 + 1je sait qu
Générer 5000 réels Aléatoirement.... [ par nHioub ]
Bonjour, voila je dois générer 5000 réels pour étudier la vitesse de tri dans un tableaux des fonctions Bulles/Selection/Shell.Pour savoir si mon prog
Placement "esthétique" des sommets d'un graphe [ par blanccc ]
Bonjour tout le monde. Voilà mon problème : je suis stagiaire et il faut que je "programme" le dessin d'un graphe composé de sommets et d'arêtes. J'a
Heeeeeeeeelp siouplé !!! [ par blanccc ]
Bonjour tout le monde. Voilà mon problème : je suis stagiaire et il faut que je "programme" le dessin d'un graphe composé de sommets et d'arêtes. J'a
Graphe [ par prog_amateur ]
je cherche un programme en C qui permet tester si un graphe est Eulérien ou non
flux reseau avec directshow [ par ebooserge ]
salut a tous,pour ceux qui sont a l'aise avec directshow, j'aurais besoin d'une petite suggestion.voila le but de mon prog est d'acquérir un flux UDP
Graphe Eulerien [ par prog_amateur ]
je recherche un programme qui permet de tester si un graphe est Eulerien
graphe [ par rojorabe ]
salut, j'ai besoin d'aide. est ce que il y a qlq1 qui peu me donné une programme en C++ ou en langahe C qui affiche la courbe d'une fonction (n'impor
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|