BreadthFirst.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Collections.Generic;
  2. namespace PathfindingPCL
  3. {
  4. public class BreadthFirst : Algorithm
  5. {
  6. public BreadthFirst(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 file
  10. List<Node> notVisitedNodes = graph.NodesList();
  11. Queue<Node> nodesToVisit = new Queue<Node>();
  12. nodesToVisit.Enqueue(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.Dequeue();
  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.Enqueue(node);
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }