Le seul élément de la recherche en profondeur que vous modifiez est l'ordre dans lequel les enfants sont examinés. La version normale se déroule dans un ordre arbitraire, c'est-à-dire dans l'ordre dans lequel les enfants sont stockés.
La seule alternative possible (vers les chemins les plus courts) que je peux trouver est une approche gourmande, qui regarde les enfants par ordre de distance par rapport au nœud actuel (de petit à grand). Il est facile de construire un contre-exemple pour cette règle:
[ source ]
Maintenant, ce n'est pas une preuve qu'il n'existe pas de stratégie de choix du prochain enfant à étudier qui permettra à DFS de trouver les chemins les plus courts.
Cependant, peu importe la règle¹, vous pouvez construire des graphiques qui font que DFS s'engage à faire un long détour au tout premier nœud, comme je l'ai fait pour la règle gourmande. Attribuez des arêtes et telle sorte que la règle choisisse de visiter première, et affectez un poids supérieur à celui de . Par conséquent, il est plausible que DFS ne puisse jamais trouver les chemins les plus courts (dans les graphiques généraux).( s , a ) a ( a , b ) ( s , t )( s , t )( s , a )une( a , b )( s , t )
Notez que puisque vous pouvez exprimer chaque graphique pondéré (entier positif) sous forme de graphique non pondéré - remplacez simplement les arêtes par le coût par une chaîne avec nœuds - les mêmes exemples concernent le DFS sur les graphiques non pondérés. Ici, la situation est encore plus sombre: sans poids, que peut utiliser DFS pour déterminer le prochain enfant à visiter?c - 1cc - 1
- Tant que la règle est déterministe. Si ce n'est pas le cas, il ne peut clairement pas toujours trouver les chemins les plus courts.