Plus court chemin d'un graphe

hugo -  
 hugo -
Bonjour,
je cherche a implémenter un programme qui me permettrais d'avoir le plus court chemin entre deux sommets d'un graphe. Je n'ai pas vraiment d'idée de comment je pourrais faire cela, je connais l'algorithme de Dijkstra mais je ne sais pas comment l'implémenter en c et l'adapter a ma structure de graphe( matrice adjacente avec un poids entre deux sommets). Si quelqu'un a une petite idée ou connais un autre algorithme de ce type je suis preneur. Merci d'avance.


Configuration: Windows / Internet Explorer 11.0

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, as-tu commencé ton programme? peux-tu le partager?
dans quel contexte fais-tu cela?
l'algorithme de Floyd–Warshall est peut-être plus simple à programmer.
0
hugo
 
bonjour, pour l'instant j'ai seulement générer un graphe aléatoirement et j'ai mis un poids sur les arêtes. je dois faire cela dans le cadre d'un projet. il me semble que l'algorithme de Floyd fonctionne pour un graphe orienté.

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


typedef struct { 

  	int  matrice_adjacence[50][50];
  	int temps[50][50];
} graphe;

graphe init_graphe(){

	graphe G ; int i; int j;
	for(i = 0 ; i <50 ; i ++){
		for(j = 0 ; j <49 ; j++){

			G.matrice_adjacence[i][j] = 0; 
		}

	}
	return G;
	}

graphe alea_graphe(){
graphe G;
	for(int i=0; i<50 ; i++){

				int j =rand()%50;
				G.matrice_adjacence[i][j]=1; G.matrice_adjacence[j][i]=1;
				int a=rand()%30;
				G.temps[i][j]=a; G.temps[j][i]=a;

	}
		return G;
}

void affiche_graphe(graphe G){
	int i,j;
	printf("Graphe avec %d sommets \n",50);
	for(i = 0; i<50; i++){
		printf("Voisins de %d: ",i);
		for(j = 0; j < 50; j++){
			if(G.matrice_adjacence[i][j]) printf("%d ",j);
		}
		printf("\n");
	}
}

int main(){
	graphe g; 
	g=init_graphe();
	g=alea_graphe();
	affiche_graphe(g);
}
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > hugo
 
tu as généré un graphe orienté. pourquoi penses-tu le contraire?
je vois plusieurs erreurs dans ton code, prends le temps de les corriger.
0
hugo > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
pour moi il est non orienté car j'ai mis même poids sur les deux arêtes
,
G.temps[i][j]=a; G.temps[j][i]=a;
ici a est le même pour les deux arêtes.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > hugo
 
il s'agit donc bien d'un graphe orienté.
je vois plusieurs erreurs dans ton code, prends le temps de les corriger.
0
hugo > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
dans quels parties tu pense qu'il y a des erreurs?
0