DepthFirst.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Collections.Generic;
  2. namespace PathfindingPCL
  3. {
  4. public class DepthFirst : Algorithm
  5. {
  6. public DepthFirst(Graph _graph, IHM _ihm) : base(_graph, _ihm) {}
  7. protected override void Run()
  8. {
  9. // Création de la liste des noeuds non visités, et de la pile
  10. List<Node> notVisitedNodes = graph.NodesList();
  11. Stack<Node> nodesToVisit = new Stack<Node>();
  12. nodesToVisit.Push(graph.BeginningNode());
  13. notVisitedNodes.Remove(graph.BeginningNode());
  14. Node exitNode = graph.ExitNode();
  15. bool exitReached = false;
  16. // Boucle principale
  17. while (nodesToVisit.Count != 0 && !exitReached)
  18. {
  19. Node currentNode = nodesToVisit.Pop();
  20. if (currentNode.Equals(exitNode))
  21. {
  22. // On a fini
  23. exitReached = true;
  24. }
  25. else
  26. {
  27. // On ajoute les voisins
  28. foreach (Node node in graph.NodesList(currentNode))
  29. {
  30. if (notVisitedNodes.Contains(node))
  31. {
  32. notVisitedNodes.Remove(node);
  33. node.Precursor = currentNode;
  34. node.DistanceFromBegin = currentNode.DistanceFromBegin + graph.CostBetweenNodes(currentNode, node);
  35. nodesToVisit.Push(node);
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }