begin process at 2012 05 27 16:04:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ENUMÉRATION DE TOUS LES CHEMINS DANS UN GRAPHE

ENUMÉRATION DE TOUS LES CHEMINS DANS UN GRAPHE


 Information sur la source

 Description

Voici un code en C permettant d'énumérer tous les chemins dans un graphe que certains pouuraient en avoir besoin pour leur manipulation en théorie des graphes.

Je n'en ai pas trouvé sur Internet, c'est pourquoi j'ai jugé opprtun de le mettre. Ilpourrait êyre utile en cas de génération de tous les plus courts chemins. Dans ce casd il suffit d'ajouter à la ligne de détrmination des successeurs d'un sommet la condition de DJXTRA.

Source

  • #include <stdio.h>
  • #include <string.h>
  • #include <stdlib.h>
  • int i,k,g,f,adj[10][10];
  • FILE *fich;
  • roadmap(char chem[10],int ext,int destination)
  • {
  • char s[10],m[1];
  • int nod,j,suc[10];
  • if (ext == destination)
  • fprintf(fich,"%s\n",chem);
  • else
  • {
  • j=1;
  • for (k=1;k<8;k++)
  • {
  • if (adj[ext][k]==1)
  • {
  • suc[j]= k;
  • j++;
  • }
  • }
  • for (nod=1;nod<j;nod++)
  • {
  • strcpy(s,chem);
  • _itoa(suc[nod],m,10);
  • strcat(s,m);
  • roadmap(s, suc[nod], destination);
  • }
  • }
  • }
  • main()
  • {
  • for (f=1;f<8;f++)
  • for (g=1;g<8;g++)
  • adj[f][g]=0;
  • adj[1][2]=1;
  • adj[1][7]=1;
  • adj[2][3]=1;
  • adj[3][4]=1;
  • adj[2][4]=1;
  • adj[2][6]=1;
  • adj[4][5]=1;
  • adj[5][6]=1;
  • adj[7][6]=1;
  • fich=fopen("c:\\phd\\roadmap.txt","w");
  • roadmap("1",1,5);
  • fclose(fich);
  • return 0;
  • }
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int i,k,g,f,adj[10][10];
FILE *fich;

roadmap(char chem[10],int ext,int destination)
{
	char s[10],m[1];
	int nod,j,suc[10];
	if (ext == destination) 
		fprintf(fich,"%s\n",chem);
	else
	{ 
		j=1;
		for (k=1;k<8;k++)
		{
			if (adj[ext][k]==1)
			{
				suc[j]= k;
				j++;
			}
		}
		for (nod=1;nod<j;nod++)
		{
			strcpy(s,chem);
			_itoa(suc[nod],m,10);
			strcat(s,m);
			roadmap(s, suc[nod], destination);
		}   
	}
}

main()
{	
	for (f=1;f<8;f++)
		for (g=1;g<8;g++)
			adj[f][g]=0;
	adj[1][2]=1;
	adj[1][7]=1;
	adj[2][3]=1;
	adj[3][4]=1;
	adj[2][4]=1;
	adj[2][6]=1;
	adj[4][5]=1;
	adj[5][6]=1;
	adj[7][6]=1;
	fich=fopen("c:\\phd\\roadmap.txt","w");
	roadmap("1",1,5);
	fclose(fich);
	return 0;
}


 Conclusion

J'ai pris un exemple d'un graphe à 7 noeuds numérotés de 1 à 7. adj[i][j] définit la matrice d'adjacence


 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip BELLMAN:LA VALEUR DU PLUS COURT CHEMIN ET LE PLUS COURT CHEM... par Perace
Source avec Zip Source avec une capture REPRESENTATION GRAPHIQUE DE DONNEES par wildhawk
Source avec Zip Source avec une capture CALCULER SES MOYENNES par uaip
Source avec Zip LES GRAPHES - CYCLE HAMILTONIEN par badrsmimite
CONVERTIR CHEMIN RELATIF EN CHEMIN ABSOLUE (POUR DISQUE DUR) par darkpoulpo

Commentaires et avis

Commentaire de Pamaury le 16/03/2006 17:37:24

roadmap(char chem[10],int ext,int destination)

chemin limité à 10 caractères .
Quitte à être vraiment précis(ce code n'est pas d'une extrême difficulté il me semble), tu pourrais donenr un moyen de donner le chemin de façon indépendante de la longueur .
Idée:
pour chaque noued stockée une variable precedent pour remonter le chemin parcourut et le sauvegarder
Ou alors un tableau alloué préalablement avec une taille maximum(=nombre de noeud) et un index
enfin voilà

Je pense que pour un code comme celui là c'eétait un minimum...

Commentaire de osta le 16/03/2006 20:03:45

En fait, la plupart des réseaux que je gère à mon travail ne dépassent guère les 100 noeuds.De plus, la génération des chemins n'est primordiale dans mes algoruthmes de routage. C'est pourquoi je n'ai pas beaucoup investi dans cet algorithme.

Je n''en ai eu besoin que pour générer tous les plus courts chemins (et encore..)

Commentaire de osta le 16/03/2006 20:08:17

Je m'excuse, j'ai oublié d'empêcher l'algorithme d'entrer en boucle lors d'un cycle dans le graohe. Il suffit d'éliminer un des successeurs d'un noeud s'il a été déjà incoropré dans la variable chem.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Recherche d'un chemin dans un graphe Eulerien [ par prog_amateur ] salut,voici mon probl&#233;me :je veux impl&#233;menter l'algorithme d'Euler pour tester si un graphe est eulerien mais je n'est pas abouti a un resu Implémenter en C/C++ un programme qui recherche le plus court chemin d'un graphe [ par asrml ] Bonjour tout le monde, Je voudrais demander vos aides s'il vous plait: Le but du devoir c'est la recherche du plus court chemin dans un graphe non ori Liste de liste pour :graphe et algo de Prim [ par sbeclo007 ] // Liste de sommet class Liste_Sommet :public Liste,public Sommet { public: Liste_Sommet (){} void affiche(); Sommet& Sommet_courant(); void Sommet_pr voyageur de commerce : recusivité [ par ianov ] je voudrais implémenter une méthode récursive du voyageur de commerce. En effet, je ne voudrais pas explorer tous les circuits possibles mais seulemen graphe [ par cabaricho ] Comment en représente le graphe d'une distribution de probabilité(bêta, normale...) telle que j'ai les fonctions qui permettant de calculer les densit maximum cardinality search graphe triangulé [ par anissalger ] svp c'est très urgent je cherche un algorithme de reconnaissance d'un graphe triangulé par la méthode maximum cardinality search par le langage delphi dessiner des points dans un graphe [ par noussagh ] bonjour je bug depuis quelques jours pour dessiner des points. En effet j'ai un programme en C qui me calcule a chaque itération X et Y,j'aimerai af affichage d'un graphe sur une sphère [ par nemson ] A partir d'un graphe existant (décrit dans un fichier excel) et d'une matrice de similarité entre les noeuds du graphe, je veux calculer les coordonné extraire le nom d'un fichier de son chemin d'accés [ par johnASP ] salut, J'utilise le logiciel Microsoft Visual Studio en C++ .Net . Je souhaiterai pouvoir ouvrir un fichier .txt présent dans mon ordinateur pour l'a Récuperer le chemin complet d'un fichier avec OpenFileDialog en C++.Net [ par johnASP ] Bonjour, Je travail sous Visual Studio v.2005. Je voudrais, aprés l'ajout d'un fichier via la fonction "openFileDialog", récupérer le chemin d'accés


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales