diff options
| author | Simon O'Shea <osheas1@wit.edu> | 2023-08-08 18:35:53 -0400 |
|---|---|---|
| committer | Simon O'Shea <osheas1@wit.edu> | 2023-08-08 18:35:53 -0400 |
| commit | c49365523bcd8680a915a4ff7cc861bae93bdb81 (patch) | |
| tree | 6d16dca31343b347e9a0dd9783f9937d7097cb9a /Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs | |
| parent | 96a90a647dd33aa5ab40ff0b887df63cb1c27e66 (diff) | |
broken AStar has been implemented
need to fix sorting problem because the returned order of movements does not make any sense
Diffstat (limited to 'Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs')
| -rw-r--r-- | Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs b/Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs index 884a05a..a3fe8e0 100644 --- a/Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs +++ b/Pathfinding Visualizer/Assets/Scripts/Pathfinder.cs @@ -4,7 +4,7 @@ using UnityEngine; using System.Linq; -public class Pathfinder : MonoBehaviour +public class Pathfinder { // used to store all unique states that agent has visited (holds agent and sample coords) @@ -58,45 +58,53 @@ public class Pathfinder : MonoBehaviour public void StartWork() { Node initialState = new Node(null, agent, samples, '0', 0, 0); - Stack<Node> result = new Stack<Node>(); + List<Node> result = new List<Node>(); if (algorithm == 0) { result = StartAStar(initialState); - + Debug.Log(" "); + for(int i = 0; i < result.Count; i++) + { + Node n = result[i]; + Debug.Log(n.lastMove); + } } } - public static Stack<Node> StartAStar(Node initialState) + public static List<Node> StartAStar(Node initialState) { - Stack<Node> solution = new Stack<Node>(); + List<Node> solution = new List<Node>(); - Queue<Node> open = new Queue<Node>(); + List<Node> open = new List<Node>(); //PriorityQueue<Node> open = new PriorityQueue<Node>(); - open.Enqueue(initialState); - int cap = 10000; + open.Add(initialState); + int cap = 1000; while (true && cap > 0) { if (!open.Any()) return solution; - Node currentNode = open.Dequeue(); + open = open.OrderBy(Node => Node.fn).ToList(); + + Node currentNode = open[0]; + open.RemoveAt(0); + // check whether we are in goal state if (currentNode.samples.Count() == 0) { - - var orderedList = open.OrderBy(Node => Node.fn); - while (currentNode.parent != null) { - solution.Push(currentNode); + Debug.Log("Agent at: " + currentNode.agent.x + ", " + currentNode.agent.y); + solution.Add(currentNode); currentNode = currentNode.parent; } + return solution; } @@ -112,12 +120,12 @@ public class Pathfinder : MonoBehaviour foreach (Node child in children) { - open.Enqueue(child); + open.Add(child); } cap--; } - + return solution; } // HEURISTICS FOR ASTAR public static List<Node> h0(List<Node> children) |
