• Aucun résultat trouvé

from numpy import zeros, dot # Fonction pour la construction de la matrice d'adjacence

N/A
N/A
Protected

Academic year: 2022

Partager "from numpy import zeros, dot # Fonction pour la construction de la matrice d'adjacence"

Copied!
2
0
0

Texte intégral

(1)

# -*- coding: utf-8 -*-

# ============================================================== #

# ============================================================== #

# Programme étudiant la connexité d'un graphe simple non orienté #

# à partir de sa matrice d'adjacence. #

# JANVIER 2015 #

# ============================================================== #

# ============================================================== #

# N'importons de numpy que ce dont nous avons réellement besoin !

# Rappelons que la fonction "dot" de la bibliothèque numpy permet

# d'effectuer des produits matriciels.

from numpy import zeros, dot

# Fonction pour la construction de la matrice d'adjacence.

# Les arguments sont :

# (1) L'ordre du graphe

# (2) La liste des arêtes du graphe def fMatAdj(n,LA):

# n est le nombre de sommets du graphe

# LA est une liste dont chaque élément est une liste comportant deux entiers # i et j si l'arête [S(i)S(j)] existe.

Adj = zeros((n,n))

# Construction de la matrice d'adjacence Adj. La validité de la liste LA est # vérifiée au fur et à mesure.

for k in range(len(LA)):

i, j = LA[k][0], LA[k][1]

if len(LA[k]) > 2 or i == j or Adj[i,j] != 0:

return ('Liste non valide !') else:

Adj[i,j], Adj[j,i] = 1, 1 return Adj

# Fonction d'étude de la connexité d'un graphe simple à partir de sa matrice d'adjacence

# (seul argument fourni).

def connexe(Adj):

# La matrice fournie est-elle carrée ?

# Remarque : on pourrait mettre en oeuvre bien d'autres tests ! nl, nc = Adj.shape[0], Adj.shape[1]

if nl != nc:

return('La matrice d\'adjacence n\'est pas carrée !') # La matrice d'adjacence est carrée.

# On calcule alors la somme de ses puissances (l'exposant variant de 0 à n-1).

MC = zeros((n,n)) for i in range(n):

MC[i,i] = 1 SMC = MC

for i in range(1,n):

MC = dot(MC,Adj) SMC += MC

# Y a-t-il un zéro dans la matrice somme obtenue ?

# On tient compte ici du fait que la matrice étudiée, SMC, est symétrique.

test = True for i in range(n):

for j in range(i,n):

if SMC[i,j] == 0:

test = False break return(test)

# PROGRAMME PRINCIPAL

# ===================

# Définition du graphe par ses arêtes.

# On travaille ici avec un petit graphe d'ordre 5.

n = 5

LA = [[0,2],[2,3],[3,1],[0,4],[2,4],[1,2]]

# On peut simplement donner à n la valeur 6 pour "créer" un graphe non connexe.

# n = 6

# Construction de la matrice d'adjacence et affichage.

MA = fMatAdj(n,LA)

print('La matrice d\'adjacence :') print(MA)

1

(2)

# Le graphe étudié est-il connexe ? if connexe(MA):

print('Le graphe considéré est connexe !') else:

print('Le graphe considéré n\'est pas connexe !')

# ================

# FIN DU PROGRAMME

2

Références

Documents relatifs

Coecients du polynôme caractéristique1. Application aux

D´ eterminer les espaces propres de A et indiquer une matrice inversible P telle P −1 AP soit diagonale.. D´ eterminer les valeurs propres

Trouver une matrice de changement de base P tel que P −1 BP soit sous forme de

Trouver une base orthonorm´ ee de R 3 form´ ee par des vecteurs propres de

On trouvera par exemple la classe (le constructeur) Polynomial pour fabriquer (instancier) des polynômes représentés par le vecteur de leurs coefficients dans la base canonique.

[r]

Pour les simulations informatiques sous Python, on importera les bibliothèques scientifiques à l’aide des ins- tructions suivantes :. import numpy

Le rang de M est égal au rang d’une matrice échelonnée comportant