image



Définition

Il existe principalement les deux définitions suivantes.

La définition d'un tuple à deux

LegrapheGestunupletordonné(V,E),oùVisappellel'ensembledesverticesetEestl'ensembledesarêtes(Edgeset),EetVnes'intersectentpas.IlspeuventégalementêtreécritscommeV(G)etE(G).

LesélémentsdeEsonttousdeux-uplets,représentéspar(x,y),oùx,y∈V.

Définitiondestriples

Le graphe G se rapporte à un triplet (V, E, I), où Vis est appelé l'ensemble supérieur, E est appelé l'ensemble d'arêtes, et E et V ne s'intersectent pas ;

Classification

Graphiques dirigés, Graphiques non orientés

Si vous spécifiez une direction pour chaque arête du graphe, le graphe résultant est appelé un graphe orienté.

Singlegraphe

Un graphe s'il n'y a qu'une seule arête entre deux sommets (dans un graphe orienté, il n'y a qu'une seule arête dans chaque direction entre deux sommets) ; l'ensemble d'arêtes ne contient pas l'anneau.

Termes de base

Ordre : la taille de l'ensemble de points Vin dans le graphe G est appelée l'ordre du graphe G.

Sous-graphe :LorsquelegrapheG'=(V',E')oùV'estcontenudansVetE'estcontenudansE,alorsG'estappelégrapheG=(V,E)sous-graphe.Chaquegrapheestunsous-graphedeluimême.

Sous-Graphe Spanning : fait référence au sous-graphe G' de G qui vérifie la condition V(G')=V(G).

Sous-grapheinduit : prenez le sous-ensemble non vide V1 de l'ensemble de sommets V du graphe Gas l'ensemble de sommets et utilisez toutes les arêtes avec les deux extrémités de E1 comme ensemble d'arêtes du sous-graphe de G.

Degré : Le degré de sommet fait référence au nombre d'arêtes associées au sommet et au degré de sommet vis indiqué par d(v).

Degré intérieur et degré extérieur : pour les graphes orientés, le degré de sommet peut être subdivisé en degré intérieur et degré extérieur.

Boucle : si les deux sommets d'une arête sont identiques, ce côté est appelé en boucle.

Chemin :Unchemindeutovfait référenceàuneséquencev0,e1,v1,e2,v2,...ek,vk,oùlessommetsdeiasontvietvi-1,Kestappelélalongueurduchemin.

Trace : si les arêtes du chemin P(u,v) sont différentes, le chemin est appelé à partir de utov.

Piste : si les sommets du chemin P (u, v) sont différents, le chemin est appelé une piste à partir de utov.

Unepisteferméeestappeléeuncircuit,unepisteferméeestappeléeuncycle.

(Une autre définition est : la marche correspond au chemin ci-dessus, le chemin correspond à la piste ci-dessus. Le sentier correspond à la trace.)

Pont : si un bord est supprimé, il le sera afin que tout le graphique soit déconnecté, le bord est appelé un pont.

Lareprésentationdestockagedesgraphes

Représentation de stockage de tableau (matrice d'adjacence) (dirigée ou non dirigée)

Adjacencytablestoragerepresentation

La représentation de stockage de la liste réticulée d'un graphe orienté

Lareprésentationdustockagedesmultiplestablesd'adjacenced'ungraphenonorienté

Iftwopointsarenotadjacentinanunweightedgraph, thecorrespondingpositionoftheadjacencymatrixis 0, Fortheweightedgraph (net), thecorrespondingpositionis∞.Theadjacencymatrixrepresentationofagraphisunique, buttheadjacencylistrepresentationisnotunique.Intheadjacencylist, asinglylinkedlistisestablishedforeachvertexinthegraph (andnumberedintheorderofestablishment), andthenodeinthei-thsinglylinkedlistrepresentstheedgeattachedtothevertexvi (foradirectedgraph, thevertexviisTailarc) .Eachnodeiscomposedoftwodomains: adjvex, whichisusedtoindicatethepositionofthepointadjacenttoviin thegraph, andnextarc, whichisusedtopointtothenextedgeattachedtovertexvi.Node. Si la table d'espacement de tête est utilisée pour stocker les informations du réseau (graphique pondéré), vous devez également ajouter un domaine (informations) pour stocker le poids dans le nœud. Lesdonnéesdechampdecesnœudsd'en-têtesontutiliséespourstockerlenumérodunœudvi,etledeuxièmechamppremierarcestutilisépourPointerverslepremiernœuddanslalisteliée.

Dans les deux structures de graphes ci-dessus, l'un est un graphe orienté, c'est-à-dire que chaque côté a une direction, et l'autre est un graphe non orienté, c'est-à-dire que chaque côté n'a aucune direction.

Dans un graphe orienté, les arêtes sont généralement appelées arcs, l'extrémité contenant la flèche est appelée tête d'arc et l'autre extrémité s'appelle la queue d'arc, ce qui signifie qu'il existe une arête à partir du sommetxvitsurtexvj.

Iftherearenverticesinadirectedgraph, thereareatmostn (n-1) arcs, andwecalladirectedgraphwithn (n-1) arcsadirectedcompletepicture.Thenumberofarcswithvertexvasthearctailiscalledtheoutdegreeofvertexv, andthenumberofarcswithvertexvasthearcheadiscalledtheindegreeofvertexv.Inanundirectedgraph, theedgeisdenotedas (vi, vj), whichimpliestheexistenceof andtwoarcs.Iftherearenverticesintheundirectedgraph, thereareatmostn (n-1) / 2arcs, etnousappelonslegraphenonorientéavecn(n-1)/2arcslegraphecompletnonorienté.

La longueur du chemin fait référence au nombre d'arêtes ou d'arcs sur le chemin.

Si le premier sommet existe le même que le dernier sommet, alors ce chemin est en boucle.

Silessommetsducheminn'apparaissentpasrépétitivement,lecheminestappelécheminsimple.

Dans un graphe non orienté, s'il existe un chemin à partir du sommet vit sur tex vj, alors vi et v sont dits être connectés.

Dans un graphe orienté, si pour chaque paire de sommets via et vj, il existe des chemins de vitov et de vj à vi, alors le graphe est appelé un graphe fortement connexe ; sinon, les sous-graphes les plus connectés au maximum sont appelés composants fortement connectés.

Opérationsdebasedesgraphes

(1)Créerune structure de grapheCréerGraph(G)

(2)RécupérerunsommetdonnéLocateVex(G,elem)

(3)GetvertexdanslegrapheGetVex(G,v)

(4)AssignPutVex(G,v,value)tothevertexinthegraph

(5)RetouraupremierpointadjacentFirstAdjVex(G,v)

(6)RetouraupointadjacentsuivantNextAdjVex(G,v,w)

(7)InsérerAvertexInsérerVex(G,v)

(8)SuppressionavertexSuppressionVex(G,v)

(9)InsérerunbordInsérerBord(G,v,w)

p>

(10)SupprimeunbordSupprimeBord(G,v,w)

(11)TraversegraphTraverse(G,v)

Spanning Tree

L'arbreétendantetlaforêtdugraphe

montrel'arbre couvrant d'un graphe connexe non orienté, et les sommets représentés par les doubles boucles sont les nœuds racine de l'arbre couvrant.

MinimumSpanningTree

Dans un graphique, chaque arête ou arc peut avoir une valeur qui lui est associée, que nous appelons poids.

L'arbre couvrant d'un graphe ou d'un réseau n'est pas unique.

Calculons la somme des poids des deux arbres couvrants ci-dessus. Le poids total du premier arbre couvrant est : 16+11+5+6+18=56 ;

Themethodofconstructingtheminimumspanningtree: Initiallythespanningtreeisempty, thatis, thereisnonodeandoneedge.Firstselectavertexastherootofthespanningtree, andthenneveramongtheedgesinthespanningtreeeachtimeChooseanedgewiththesmallestpossibleweight.Inordertoensurethattheedgeaddedtothespanningtreedoesnotcausealoop, oneofthetwoverticesadjacenttotheedgemustalreadybeinthespanningtree, andtheothermustnotbeinthespanningtree.Therearenvertices (thenetworkconsideredhereisaconnectedundirectedgraph), thentheminimumspanningtreeofthisnetworkcanbeobtainedbyselectingn-1edgesaccordingtothiscondition.Thedetailedprocesscanbedescribedas: setting2sets, theelementsintheUsetarenodesinthespanningtree, andtheelementsintheV-Usetaretheverticesnotinthespanningtree.Firstselectavertexastherootnodeofthespanningtree, andputitintotheUset, thenfindanedgewiththesmallestweightamongtheedgesintheVUsetattheendvertexintheUsetandtheotherendvertexintheVUset.ThisedgeandthevertexnotintheUsetareaddedtothespanningtree, thatis, theedgeisoutput, puissessommetssontajoutésàl'ensembleU,etcetteopérationestrépétén-1fois.

Ensuite, nous examinons comment mettre en œuvre l'algorithme de ce processus de fonctionnement.

Analyse: (1) Ithastwomainoperations: selectinganedgeaccordingtoconditionsandaddingverticestotheUset, (2) EachvertexinthenetworkiseitherintheUsetorintheUset.VUcollection.Inordertoimprovethetimeandspaceefficiencyofthealgorithm, wewilldesignanauxiliaryarrayclosedgeforthisalgorithmtorecordtheedgewiththesmallestweightfromthesetUtothesetV-U.ForeachvertexbelongingtotheVUset, thereisacorrespondingcomponentclosedge [i-1] intheauxiliaryarray, whichincludestwofields, onefieldisusedtorepresenttheedgeformedbythevertexandsomeverticesintheVUsetTheweightoftheedgewiththesmallestweightis0ifthevertexenterstheUset; theotherfieldrepresentsthevertexindexintheVUsetcorrespondingtotheedgewiththesmallestweight.Thetypedefinitionisasfollows:

  #defineMAX_NUM10struct{intadjvex;floatlowcist;}closeedge[MAX_NUM] ;

Le processus d'exécution du gorithme entier peut être décrit comme :

  {initialisezlecontenudutableaubordfermé;sélectionnezvertexkacommenœudracineduspanningtree,etajoutezleUset;répétezlesopérationssuivantesn-1fois:lsélectionnezunbordquiremplitlacondition;laffichezlesdeuxpointsterminauxdecebord;l modifiezlesinformationsdevertexdansleVUset,c'est-à-direlebordaveclepluspetitpoidsdansleUset.}

En supposant que le réseau est donné sous la forme d'une matrice d'adjacence, l'algorithme complet est :

  voidMini_SpanTree(GraphG,intk,intn){//Gistheadjacencymatrixofthenet,Kestlenumérodeséquencedunœudracineduspanningtree,nilenombredesommetsduréseaupour(j=0;j

structure de stockage

matrice d'adjacence :

YesAdirectedgraph AdjacencyMatrix

Un graphe orienté avec n sommets peut être représenté par une n′ n matrice carrée. Supposons. ,etlenombred'arcsdugrapheorientéestégalaunombrede"1"danslamatrice.

La matrice d'adjacence du graphe non orienté

Le graphe non orienté à n sommets peut également être représenté par une n′ n matrice carrée. lesommetestlenombrede"1"danslai-portéedelamatriceoulenombrede"1"danslai-ièmecolonne.

DanslelangageC,ladéfinitiondetypequiimplémentelanotationdelamatricedejacencedetêteestlasuivante :

  #defineMAX_VERTEX_NUM20typedefstructgraph{Elemtypeelem[MAX_VERTEX_NUM][MAX_VERTEX_NUM];intn;}Graph ;

Tableau de contiguïté

Lastructuredugénodebordest :

adjvexestl'indicedusommetauquellel'arêteoul'arcestattachédansletableau,ensuitelepointedepuisl'arêteoulenœudd'arcprochain

elemislecontenuduvertex,lapremièrearêteestpointeurverslapremièrearêteoulenœudd'arc.

EnlangageC,ladéfinitiondetypepourréaliserlanotationdelalistedjacencyestlasuivante :

  #defineMAX_VERTEX_NUM30//MaxNumberofverticestypedefstructEdgeLinklist{//edgenodeintadjvex;structEdgeLinklist*next;}EdgeLinklist;typedefstructVexLinklist{//vertexnodeElemtypeelem;EdgeLinklist*firstedge;}VexLinklist,AdjList[MAX_VERTEX_NUM];

L'implémentationdel'algorithmedecréationdeslistesd'adjacencedesgraphesorientésetdesgraphesnonorientés :

(1) Créer des listes de contiguïtés de graphes orientés

  voidCreate_adj(AdjListadj,intn){for(i=0;iadgvex=j-1;s->next=adj[i-1].firstedge;//ClosethenewarcThepointisinsertedintothecorrespondingpositionadj[i-1].firstegde=s;scanf(&i, &j);//Enterthenextarc}}

(2) Créer une liste d'adjacence graphique non orientée

  voidCreate_adj(AdjListadj,intn){for(i=0;iadgvex=j-1;s2=(EdgeLinklist*)malloc(sizeof(EdgeLinklist));s2->adgvex=i-1;s1->next=adj[i -1].firstedge;adj[i-1].firstegde=s1;s2->next=adj[j-1].firstedge;adj[j-1].firstegde=s2;scanf(&i,&j);} }

Graphtraversal

Ilexistedeuxméthodescourantesdetraversaldegraphique:traverséeenprofondeurd'abordetlargeur prioritaire,cesdeuxméthodesdetraversesontapplicablesauxgraphesorientésetnonorientés.

Traversée en profondeur

L'idée de​​traversée en profondeur en premier est similaire à la traversée en premier ordre des arbres.

Implémentation de l'algorithme de traversée en profondeur :

Afin de distinguer si des sommets ont été visités dans l'algorithme, un tableau unidimensionnel visité [0..n-1] (nestlenombredesommetsdanslegraphe),utilisépourdéfinirledrapeauvisite,savaleurinitialevisité(0≤i≤n-1)est"0",indiquantquelesommetaveclavaleurd'indicedanslalistedjacencydetêten'apasétévisité,unefoisquelevertexestvisité,défini.

intvisité[0..n-1]={0,0,...0} ;

voidDFS(AdjListadj,intv)

{//vislavaleurdel'indicedanslalistejacencydetêtedupointdedépartdelatraverse,etsonindicecommenceà0

visité[v]=1;visité(adj[v].elem);

for(w=adj[v].firstedge;w;w=w->suivant)

if(!visited[w->adjvex])DFS(adj,w->adjvex);

}

Forundirectedgraphs, thisalgorithmcantraversetoalltheverticesintheconnectedcomponentwherethevvertexislocated, andthevvertexisnotthesameAllverticesintheconnectedcomponentscannotbetraversed, andfordirectedgraphs, allverticesthatcanbereachedbythestartingvertexvcanbetraversed.Ifyouwanttotraversealltheverticesinthegraph, youneedtoaddthedetectionoftheaccessstateofeachvertexonthebasisoftheabove-mentioneddepth-firsttraversalalgorithm:

  intvisited[0..n-1]={0,0,...0};voidDFSTraverse(AdjListadj){for(v=0;v

L'algorithme cursif est le suivant :

  Booleanvisited[MAX_VERTEX_NUM];//VisitflagarrayStatus(*VisitFunc)(intv);//VisitFuncisthevisitfunction,quiestappelépourchaquevertexdugrapheFunctionvoidDFSTraverse(GraphG,Status(*Visit)(intv)){VisitFunc=Visit;for(v=0;v=0;w=NextAdjVex(G,v ,w))//FirstAdjVexrenvoielepremiersommetadjacentdev,silesommetn'apasdesommetadjacentdansG,ilretournevide(0),//SiestunsommetadjacentdevVertex,NextAdjVexrenvoielesommetsuivantadjacentdev(relativetow).//Siestledernierpointadjacentdev,renvoienull(0).if(!visited[w])DFS(G,w);// CallDFSonv'sunvisitedadjacentvertexw)

Traversée en largeur

ThebreadthofthegraphTheprioritytraversalmethodisdescribedas: startingfromacertainvertexvinthegraph, aftervisitingthevertexv, sequentiallyvisitalltheneighboringpointsofvthathavenotbeenvisited, andthenvisittheneighboringpointsofeachneighboringpoint, andtheorderofaccessshouldbeTheneighboringpointsoftheverticesthatarevisitedfirstarealsovisitedfirst, untilallverticesinthegrapharevisited.Thefollowingistheprocessofbreadth-firsttraversalofanundirectedgraph.

Ci-dessous, nous discutons de plusieurs problèmes qui doivent être pris en compte pour mettre en œuvre l'algorithme de traversée en largeur :

(1) Inthebreadth-firsttraversal, thevertexthatisrequiredtobevisitedfirsthasitsneighborsalsoPriorityaccess, par conséquent, theaccesssequenceofeachvertexmustberecorded, sothattheneighboringpointsofeachvertexcanbeaccessedinthisorderlater.Aqueuestructureshouldbeusedtorecordtheaccessorderofvertices, andtheoperationalcharacteristicsofthequeuestructurecanbeusedtoenqueueeachverticesvisited, andthendequeueinturn, andvisittheirneighboringpoints;

(2)Dansleprocessusdeparcoursenlargeurd'abord,idempourleparcoursenprofondeurd'abord,afind'éviterlesvisitesrépétitivesduvertex,untableauunidimensionnelvisité[0..n-1](nilenombredesommetsdanslegraphe)doitêtrecréépourRecordsichaquesommetaétévisité.

intvisité[0..n-1]={0,0,...0} ;

voidBFS(AdjListadj,intv)

{//visl'indicedupointdedépartdelalistedjacencydetraversalint,l'indicedanslalistedjacencydetêtecommenceà0

InitQueue(Q);//Qisthequeue

visité[v]=1;visite(adj[v].elem);EnQueue(Q,v);

tandis que(!QueueEmpty(Q)){

DeQueue(Q,v);

for(w=adj[v].firstedge;w;w=w->suivant)

if(!visited[w->adjvex]){

visité[w->adjvex]=1 ;

visite(adj[w->adjvex].elem);

EnQueue(Q,w->adjvex);}

}

}

L'algorithme non récursif est le suivant :

  Booleanvisited[MAX_VERTEX_NUM];//VisitflagarrayStatus(*VisitFunc)(intv);//VisitFuncisthevisitfunction,quiestappelépourchaquevertexdugraphevideBFSTraverse(GraphG,Status(*Visit)(intv)){VisitFunc=Visit;for(v=0;v=0;w= NextAdjVex(G,u,w))if(!Visited[w]){//wistheadjacentvertexofuthathasnotyetbeenvisitedVisited[w]=TRUE;VisitFunc(w);EnQueue(Q,w);))))

Tri topologique

Le tri topologique est une opération importante sur les graphes orientés.

Exemple : une partie des cours que les majeures en informatique devraient suivre et les cours préalables à chaque cours.

Méthode de tri topologique :

(1) Sélectionnez un sommet avec un degré 0 dans le graphique et affichez-le ;

(2)DepuislegraphiqueSupprimezlesommetettouslesarcsaveclesommetcommequeued'arc;

Répétez ces deux étapes jusqu'à ce que tous les sommets soient sortis et que la séquence de sortie soit la topologie de cette séquence de graphes orientés cycliques.

Ensuite, nous discuterons de la façon d'implémenter des algorithmes de tri topologique.

Le processus de base de la mise en œuvre de l'algorithme est donné ci-dessous :

{Placertouslesverticesavecundegréde0danslapile ;

Répétez ce qui suit lorsque la pile n'est pas vide Opération :

Sortirvertexkdelapile ;

(1)Sortirlesinformationsdesksommets ;

(2)TouslessommetsadjacentsàkLedegréd'entréesoustraitpar1.

}

  #defineMAX_VERTEX_NUM30//NombremaximumdeverticestypedefstructEdgeLinklist{//edgenodeintadjvex;structEdgeLinklist*next;}EdgeLinklist;typedefstructVexLinklist{//VertexnodeElemtypeelem;intindegree;//RecordtheindegreeofthevertexEdgeLinklist*firstedge;}VexLinklist,AdjList[MAX_VERTEX_NUM];

Voici l'algorithme complet de tri topologique.

  StatusTopologicalSort(AdjListadj){InitStack(s);for(i=0;inext)(adj.indegree-=1;if(adj.indegree==0)Appuyer(s,i );}

Graphique important

Arbre

Planargraphe

Graphique connecté

p>

Graphique fortement connecté

Graphe acyclique dirigé

AOVnet

AOEnet

Graphecomplet :chaqueForagrapheavecdesarêtesconnectéesentredifférentsvertices,notec'estKn.

Graphe bipartite : en haut, et chaque arête a un sommet en X et un autre sommet en Y.

Graphebiparticomplet :danslegraphebipartiteG,sideuxsommetsdeXetYsontreliéspardesarêtes.Si,alorslegrapheGestnotéKm,n.

Graphe régulier : si les degrés des sommets du graphe sont égaux, le graphe est appelé graphe régulier

Graphique binaire

Concepts de base

Un graphe est une paire ordonnée, Visanodeset et E est un ensemble d'arêtes.

DesarêtesnonorientéesetUnearêteassociéeàunnœudnonordonné(v,u);unearêteorientée,unearêteassociéeàunnœudordonné.

Graphenonorienté,chaquearêteestungraphed'arêtesnonorienté,notéG=;chaquearêteestungrapheavecdesarêtesorientées,notéD=.

Un graphe mixte, qui possède à la fois des arêtes dirigées et des arêtes non dirigées.

Un graphe trivial, un graphe avec un seul nœud ; un azérographe, un graphe avec un ensemble vide d'arêtes, c'est-à-dire un graphe avec seulement des nœuds.

Autoboucles(anneaux),liéesàl'amenodeTheedge.

Parallèlenonorienté,reliantplusieursarcsnonorientésdesmêmesdeuxnœuds;parallèleorienté,connectantplusieursnœudsetdirectionentredeuxnœudsLemêmearcorienté.

Graphiquesimple,sansparallèlesetbouclesautomatiques.

DanslegraphenonorientéG=,estreliéaunœud(ÎV)Lenombred'arêtesestledegrédunœudeg(v)oud(v).

DansungrapheorientéInD=,lenombred'arêtesavecv(ÎV)commepointdedépartestledegréextérieur+(v);lenombred'arêtesavecv(ÎV)commepointfinalestledegréin-(v)..

Degré maximum,D(G)=max{d(v)½vÎV};degré minimum,d(G)=min{d(v)½vÎV}

AvecnnœudsetchaquepairedenœudsaungraphesimplenonorientéconnectéparbordetungraphecompletnonorientéKn.

supposonsG=,V,Esous-ensembleV¢,E¢constitueungrapheG¢=unsous-graphedugrapheG;siG¢ÍGEtG¢¹G,(V¢ÌVouE¢ÌE),G¢estlesous-graphepropredeG.

Générerunsousgraphe,fixerG=,siE¢ÍE,alorslegrapheestlegénérateurGraph.

Graphecomplémentaire`G=,ensembleG=,prenonsVasl'ensembledesnœuds,pourqueGdevienneungraphecomplet.

L'isomorphismedugraphe,soitG1=etG2=,ilestabijectiff:V1®V2,"(vi,vj)ÎE1,sietuniquementsi(f(vi),f(vj))ÎE2,et(vi,vj)et(f(vi),fLamultiplicitéde( vj)) est le même.Alors G1≌G2.

Condition suffisante pour l'isomorphisme : établir la relation correspondante entre deux graphes. Cette relation est une fonction bijective.

IsomorphismeConditions nécessaires :①NombredenœudsMême ;②Lenombredecôtésestlemême ;③Lenombredenœudsaveclemêmedegréestlemême.

  Booleanvisited[MAX_VERTEX_NUM];//VisitflagarrayStatus(*VisitFunc)(intv);//VisitFuncisthevisitfunction,CallthefunctionforeachvertexofthegraphvoidDFSTraverse(GraphG,Status(*Visit)(intv)){VisitFunc=Visit;for(v=0;v=0;w= NextAdjVex(G,v,w))//FirstAdjVexrenvoielepremiersommetadjacentdev.Silesommetn'apasdesommetadjacentdansG,ilretournenull(0).//Siwistheadjacentvertexofv,NextAdjVexrenvoiev(relativetow)Unsommetadjacent.//Siestledernierpointadjacentdev,renvoienull(0).if(!visited[w])DFS(G ,w);//CallDFSontheadjacentvertexwofvthathasnotencorebeenvisited}
  Booleanvisited[MAX_VERTEX_NUM];//VisittheflagarrayStatus(*VisitFunc)(intv);//VisitFuncisthevisitfunction,quiestappelépourchaquevertexdugraphevideBFSTraverse(GraphG,Status(*Visit)(intv)){VisitFunc=Visit;for(v=0;v=0;w= NextAdjVex(G,u,w))if(!Visited[w]){//wistheadjacentvertexofuthathasnotbeenvisitedVisited[w]=TRUE;VisitFunc(w);EnQueue(Q,w);}}}}
Cet article provient du réseau, ne représente pas la position de cette station. Veuillez indiquer l'origine de la réimpression
HAUT