Plus court chemin d'un graphe

Fermé
hugo - Modifié le 21 avril 2019 à 15:58
 hugo - 21 avril 2019 à 16:25
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 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 Ambassadeur 1 552
Modifié le 21 avril 2019 à 11:06
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
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 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 1 552 > hugo
Modifié le 21 avril 2019 à 15:53
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 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024
21 avril 2019 à 15:55
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 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 1 552 > hugo
21 avril 2019 à 15:57
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 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024
21 avril 2019 à 16:06
dans quels parties tu pense qu'il y a des erreurs?
0