Exemple #1
0
        public AlgorithmResult run()
        {
            var result = new AlgorithmResult();

            visited = new List <BreadthFirstSearchNode>();
            var queue = new Queue <BreadthFirstSearchNode>();

            queue.Enqueue(P);

            while (true)
            {
                if (queue.Count == 0)
                {
                    break;
                }

                var B = queue.Dequeue();

                var adjacentNodes = GetUnivisitedAdjacentNodes(B);
                visited.Add(B);

                bool breakWhile = false;
                for (var adjacentNodeIndex = 0; adjacentNodeIndex < adjacentNodes.Count; adjacentNodeIndex++)
                {
                    var C = adjacentNodes[adjacentNodeIndex];

                    if (C.Equals(this.G))
                    {
                        var node     = C;
                        var nextNode = node.Parent;
                        while (node.Parent != null)
                        {
                            result.Paths.Add(new Paths(node.X, node.Y));
                            node     = nextNode;
                            nextNode = node.Parent;
                        }

                        result.Paths.Add(new Paths(node.X, node.Y));

                        breakWhile = true;
                        break;
                    }

                    result.Probes.Add(new Probes(C.X, C.Y));
                    visited.Add(C);
                    queue.Enqueue(C);
                }

                if (breakWhile)
                {
                    break;
                }
            }

            return(result);
        }
        public AlgorithmResult run()
        {
            var OpenList = new List <AStarNode>()
            {
                P
            };
            var ClosedList = new List <AStarNode>();

            var result = new AlgorithmResult();

            while (true)
            {
                if (OpenList.Count == 0)
                {
                    break;
                }

                OpenList = OpenList.OrderBy(x => x.F).ToList();
                var B = OpenList.FirstOrDefault();
                OpenList.RemoveAt(0);
                ClosedList.Add(B);

                var connectedNodes = GetConnectedNodes(B);
                connectedNodes = connectedNodes.OrderBy(x => x.F).ToList();

                var breakWhile = false;
                for (var childIndex = 0; childIndex < connectedNodes.Count; childIndex++)
                {
                    var C = connectedNodes[childIndex];
                    CalculateCostsForNode(C);

                    var nodeInOpenList   = OpenList.FirstOrDefault(x => x.Equals(C));
                    var nodeInClosedList = ClosedList.FirstOrDefault(x => x.Equals(C));

                    result.Probes.Add(new Probes(C.X, C.Y));

                    if (C.Equals(G))
                    {
                        var node     = C;
                        var nextNode = node.Parent;
                        while (node.Parent != null)
                        {
                            result.Paths.Add(new Paths(node.X, node.Y));
                            node     = nextNode;
                            nextNode = node.Parent;
                        }

                        result.Paths.Add(new Paths(node.X, node.Y));
                        breakWhile = true;
                        break;
                    }
                    else if (nodeInOpenList != null)
                    {
                        if (C.F >= nodeInOpenList.F)
                        {
                            continue;
                        }
                    }

                    else if (nodeInClosedList != null)
                    {
                        if (C.F >= nodeInClosedList.F)
                        {
                            continue;
                        }
                        else
                        {
                            OpenList.Add(C);
                        }
                    }
                    else
                    {
                        OpenList.Add(C);
                    }
                }
                if (breakWhile)
                {
                    break;
                }
            }

            return(result);
        }
Exemple #3
0
        public AlgorithmResult run()
        {
            var result = new AlgorithmResult();

            graph.reset();
            graph.Get(P.X, P.Y).Distance = 0;

            while (true)
            {
                var UnexploredList = graph.GetSortedUnexploredList();
                if (UnexploredList.Count == 0)
                {
                    break;
                }

                var B = UnexploredList.FirstOrDefault();
                B.Selected = true;

                if (B.Equals(G))
                {
                    var node     = B;
                    var nextNode = node.Parent;
                    while (node.Parent != null)
                    {
                        result.Paths.Add(new Paths(node.X, node.Y));
                        node     = nextNode;
                        nextNode = node.Parent;
                    }

                    if (B.Parent != null)
                    {
                        result.Paths.Add(new Paths(node.X, node.Y));
                    }

                    break;
                }


                var adjacentNodes = B.Adjacents;

                for (var adjacentNodeIndex = 0; adjacentNodeIndex < adjacentNodes.Count; adjacentNodeIndex++)
                {
                    var C = adjacentNodes[adjacentNodeIndex];
                    if (C.Selected)
                    {
                        continue;
                    }

                    if (C.Weight != int.MaxValue)
                    {
                        result.Probes.Add(new Probes(C.X, C.Y));
                    }

                    var distance = (B.Distance == int.MaxValue ? 0 : B.Distance) + C.Weight + 1;

                    if (C.Weight == int.MaxValue)
                    {
                        distance = int.MaxValue;
                    }

                    if (distance < C.Distance)
                    {
                        C.Distance = distance;
                        C.Parent   = B;
                    }
                }
            }

            return(result);
        }