private void calcAdjacentNodes(DijkstraNode parent)
        {
            parent.Adjacents = new List <DijkstraNode>();

            var above = Get(parent.X, parent.Y - 1);

            if (above != null)
            {
                parent.Adjacents.Add(above);
            }

            var below = Get(parent.X, parent.Y + 1);

            if (below != null)
            {
                parent.Adjacents.Add(below);
            }

            var left = Get(parent.X - 1, parent.Y);

            if (left != null)
            {
                parent.Adjacents.Add(left);
            }

            var right = Get(parent.X + 1, parent.Y);

            if (right != null)
            {
                parent.Adjacents.Add(right);
            }
        }
        public DijkstraGraph(Map map)
        {
            this.map = map;

            Nodes = new Dictionary <string, DijkstraNode>();

            for (var x = 0; x < this.map.GetWidth(); x++)
            {
                for (var y = 0; y < this.map.GetHeight(); y++)
                {
                    var node = new DijkstraNode(x, y);
                    node.Weight = this.map.GetCoordCost(x, y);
                    if (node.Weight == 8)
                    {
                        node.Weight = int.MaxValue;
                    }
                    Nodes.Add(node.ToString(), node);
                }
            }

            foreach (var key in Nodes.Keys)
            {
                var node = Nodes[key];
                if (!node.Selected)
                {
                    calcAdjacentNodes(node);
                }
            }
        }
Beispiel #3
0
 public DijkstraAlgorithm(int startX, int startY, int goalX, int goalY, string rawData)
 {
     P     = new DijkstraNode(startX, startY);
     G     = new DijkstraNode(goalX, goalY);
     graph = new DijkstraGraph(new Map(rawData));
 }