Giter Club home page Giter Club logo

4a-isi3-tp1-2016-2017-groupe-2-diab-piat's Introduction

ISI 3 TP N°1 : Graph et Design Pattern Iterateur

Antoine Caron, Victor Lequay, Laëtitia Matignon

Le rapport est à saisir dans le ficher RAPPORT.md en utilisant le formalisme MarkDown

On souhaite utiliser le package graph représenté sur la figure 1. Ce package permet de manipuler des graphes potentiellement orientés, valués, étiquetés. Un cas d’utilisation type de ce package est le suivant. Pour construire un graphe orienté composé de quatre noeuds 1,2,3,A et comportant une arête valuée entre 1 et 2 et entre 2 et 1, et des arrêtes non valuées entre 2 et 3, 3 et 2, 1 et 3, on pourra utiliser le code suivant :

Node n1 = new Node(new IntegerLabel(1)); 
Node n2 = new Node(new IntegerLabel(2)); 
Node n3 = new Node(new IntegerLabel(3)); 
Node n4 = new Node(new StringLabel("A"));
Arc a1 = new Arc(n1,n2, new DoubleLabel(0.1));
Arc a1reversed = new Arc(n2,n1, new IntegerLabel(2)); 
Arc a2 = new Arc(n2,n3, null);
Arc a2reversed = new Arc(n3,n2, null);
Arc a3 = new Arc(n1,n3, null);
IDirectedGraph g = new Graph() ;
g.addNode(n1); 
g.addNode(n2); 
g.addNode(n3); 
g.addNode(n4);
g.addArc(a1); 
g.addArc(a1reversed); 
g.addArc(a2);
g.addArc(a2reversed);
g.addArc(a3);
System.out.println(g);
System.out.println(g.hasArc(n1, n2)+" "+g.hasArc(n2, n4));
System.out.println(g.getAdjNodes(n3));

L’affichage pourra alors ressembler à ce qui suit :

Graph
[noeud=3 : [3 ==> 2(null)]
[noeud=A : []
[noeud=2 : [2 ==> 1(2), 2 ==> 3(null)] [noeud=1 : [1 ==> 2(0.1), 1 ==> 3(null)]
true false
[2]

Question 1

Complétez la classe Graph qui implémente l’interface IDirectedGraph (complétez les méthodes spécifiées « A COM-PLETER »). Vérifiez votre implémentation, vous pouvez entre autre utiliser la classe TestGraph des tests.

On souhaite maintenant manipuler des graphes non orientés et non valués en implémentant l’interface IUndirectedGraph.

Package graph

Question 2

Proposez une application d’un patron de conception permettant cela en maximisant l’utilisation du code déjà existant. Implémentez votre solution dans une classe UndirectedGraph.

On souhaite maintenant réaliser un parcours en largeur sur un graphe, à partir d’un sommet donné. Vous trouverez l’algorithme de parcours en largeur non-récursif sur http://fr.wikipedia.org/wiki/Algorithme_de_parcours_en_largeur.

Question 3

Implémentez une classe permettant de réaliser ce parcours en largeur sur tout type de IGraph. Vous utiliserez le pattern Iterateur pour accéder aux sommets un par un, dans l’ordre du parcours. Notamment, décommentez dans IGraph la méthode creerBFSIterator, qui renvoie un itérateur pour le parcours en largeur.

Vous pouvez utiliser l’interface Java Iterator détaillée dans la javadoc : https://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html.

Vérifiez votre implémentation sur différents graphs, vous pouvez entre autre utiliser la classe TestSearch des tests.

L’utilisation d’une pile au lieu d’une file d’attente dans l’algorithme de parcours en largeur précédent transforme cet algorithme en un algorithme de parcours en profondeur.

Question 4

Implémentez une classe permettant de réaliser un parcours en profondeur sur un graphe, à partir d’un sommet donné. Vous utiliserez le pattern Iterateur pour accéder aux sommets un par un, dans l’ordre du parcours. Notamment, décommentez dans IGraph la méthode creerDFSIterator, qui renvoie un itérateur pour le parcours en profondeur.

Votre conception devra factoriser le comportement commun aux différents algorithmes de parcours. Testez votre proposition sur différents graph, par exemple, vous pouvez utiliser la classe TestSearch des tests.

4a-isi3-tp1-2016-2017-groupe-2-diab-piat's People

Contributors

gregoirepiat avatar nicolasdiab avatar slashgear avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.