Pour ce cinquième défi, l'équipe de developpez.com vous propose un challenge un peu plus difficile.
Le problème est composé de 2 problèmes assez proches. Vous pouvez donc proposer une solution pour le problème que vous souhaitez.
Challenge :
Il y a 2 versions possibles (la première ayant l'avantage d'avoir une formulation plus clair et une solution unique)
Variante 1 :
Pour un graphe orienté donné, donner le nombre minimal d'arc à ajouter afin qu'il devienne fortement connexe.
Variante 2 :
Pour un graphe orienté donné, chercher un ensemble d'arcs de taille minimal tel que l'ajout des arcs au graphe le rende fortement connexe.
Par exemple, pour le graphe suivant :
Une solution serait : (BF, FA).
On entend par taille minimal, la taille tel que pour tout ensemble d'arc de taille strictement inférieur, l'ajout de ces arcs au graphe ne le rende pas fortement connexe.
Il n'y a pas de règles quand à la représentation d'un graphe, cela peut être une implémentation récursive ou encore tout simplement [sommet: [A,B,C,D,E,F], arc: [[A,B], [B,C]] ]
La proposition peut être avec ou sans preuve.
Les règles
Il n'y a pas de règle particulière (évidemment, il faut que la solution proposée fonctionne). Vous pouvez proposer des solutions aussi bien dans des langages fonctionnels (caml, haskell, scheme, lisp...) qu'impératif. Le public pourra ainsi juger du code suivant divers critères :
- la maintenabilité
- la simplicité
- le fait qu'il soit optimisé
Le public pourra également juger les différences entre une solution fonctionnelle et une solution impérative. Il lui sera ainsi plus facile de voir, pour un même problème, les différences entre divers paradigmes.
Pour répondre, il vous suffit de poster à la suite.
A vos claviers
de votre participation.
__________________________
Sujet proposé par millie