• Aucun résultat trouvé

Algorithmie Avancée TP/TD Représentation par matrice d’adjacences

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmie Avancée TP/TD Représentation par matrice d’adjacences"

Copied!
1
0
0

Texte intégral

(1)

Algorithmie Avancée

TP/TD Représentation par matrice d’adjacences

A. Document Algo_TDParE_Birmele.pdf

Vous traiterez les exercices 1.1 et 1.2 en reprenant des exercices si besoin venant des activités supplémentaires du TP précédent (réflexion sur les arbres, connexité, nombre d’arêtes, Thorème de Cayley...)

B. Structure de données : la matrice d’adjacence

Vous implémenterez une procédure permettant de visiter les nœuds d’un graphe en C à partir d’un sommet de référence en utilisant la structure de donnée dite de matrice d’adjacence ( int **adjacence) pour représenter des graphes. Vous créerez une fonction main de test qui permette ce charger un graphe représenté par une telle matrice (une fonction chargeGraphe() est à définir dans votre fichier graphe.c à partir de scanf à partir du stdin ou d’un fichier texte de poids 0 ou 1 dont la première ligne indiquera l’ordre du graphe par exemple). Vous afficherez également l’ordre de marquage ou chemin de visite.

// Procédure qui marque tous les sommets par ordre de voisinage depuis un sommet de // référence

// Paramètres :

// adjacence : matrice d’adjacence du graphe // ordre : nombre de sommets

// s : numéro du sommet de référence

void marquerVoisins (int** adjacence, int ordre, int s) { // Variables locales

int *marques ; // tableau dynamique indiquant si les sommets sont marqués ou non int x, y ; // numéros de sommets intermédiaires

// Allouer le tableau marques de taille « ordre »

// Initialiser les marquages à 0 for (x=0 ; x<ordre ; x++)

marques[x] = 0 ; // Marquer le sommet s à 1 marques[s] = 1 ;

// Pour tous les sommets x marqués

// Marquer les sommets non marqués y adjacents à x for (x=0 ; x<ordre ; x++)

if (marques[x])

for (y=0 ; y<ordre ; y++)

if (adjacence[x][y] && !marques[y]) marques[y] = 1;

}

Est-ce que cet algorithme marque tous les sommets ? Prévoir une fonction qui affiche tous les sommets marqués.

Si non, modifier le programme pour le cas où après une passe de la fonction marquerVoisins() tous les sommets ne sont pas marqués. Quelle est la complexité calcul de cet algorithme ? Peut-on faire mieux ? Quelle est la complexité mémoire ?

S’il vous reste du temps, vous étendrez cette fonction à une version linéarisée de la matrice

d’adjacence (int * avec ordrexordre indices comme vu en cours).

Références

Documents relatifs

– La distance entre deux sommets est la longueur de la plus petite chaîne les reliant.. – Le diamètre d’un graphe est la plus grande distance existante dans le graphe On décrit

Définition: Un sous-graphe d'un graphe G est un graphe G' composé de certains sommets du graphe G, ainsi que de toutes les arêtes qui relient

La matrice associée à un graphe orienté d'ordre n est une matrice carrée 1 2 de dimension n x n , où le terme de la i ième ligne et la j ième colonne est égal à 1. s'il existe

C’est une mise en situation projet ou stage en Java sur des graphes, votre encadrant commencera par vous demander de faire un état des lieux de l’outillage disponible de façon

Cet exercice de programmation en Java est une bonne exploration des algorithmes de calculs de plus court chemin à une solution et une bonne mise en bouche pour le mini-projet

Cet exercice de programmation en Java est une bonne exploration des algorithmes de calculs de plus court chemin à une solution et une bonne mise en bouche pour le mini-projet

Bonus 1 : Vous essayerez d’afficher la courbe en créant des jeux de données aléatoirement de plus en plus grand (avec changement d’ordre de grandeur de puissances de 10

Commençons par importer la bibliothèque numpy afin de définir la fonction