示例#1
0
        public static List<Tile> Astar(Map map, Tile Start, Tile End)
        {
            Nodelist<Node> openlist = new Nodelist<Node>();
            Nodelist<Node> closelist = new Nodelist<Node>();
            List<Node> possibleNode;
            int possibleNodeCount;
            Node StartNode = new Node(Start, null, End);
            List<Tile> sol = new List<Tile>();
            openlist.Add(StartNode);

              while (openlist.Count>0)
            {
                Node current = openlist[0];
                openlist.RemoveAt(0);
                closelist.Add(current);

                if (current.Tile.X==End.X && current.Tile.Y == End.Y)
                {
                    while (current.Parent != null)
                    {
                        sol.Insert(0, current.Tile);
                        current = current.Parent;

                    }
                    return sol;
                }
                possibleNode = current.GetPossibleNode(map, End);
                possibleNodeCount = possibleNode.Count;
                for (int i = 0; i < possibleNodeCount; i++)
                {
                    if (!closelist.Contains(possibleNode[i]))
                    {
                        if (openlist.Contains(possibleNode[i]))
                        {
                            if (possibleNode[i].Heuristic < openlist[possibleNode[i]].Heuristic)
                                openlist[possibleNode[i]].Parent = current;
                        }
                        else
                            openlist.DichotomicInsertion(possibleNode[i]);
                    }
                }

            }
               sol.Add(Start);
               return sol;
        }
示例#2
0
        /// <summary>
        /// Combines two powernets when they connect via powertransfer components
        /// </summary>
        public void MergePowernets(Powernet toMerge)
        {
            //TODO: load balance reconciliation between powernets on merge tick here

            foreach (var wire in toMerge.Wirelist)
            {
                wire.Parent = this;
            }
            Wirelist.AddRange(toMerge.Wirelist);
            toMerge.Wirelist.Clear();

            foreach (var node in toMerge.Nodelist)
            {
                node.Parent = this;
            }
            Nodelist.AddRange(toMerge.Nodelist);
            toMerge.Nodelist.Clear();

            foreach (var generator in toMerge.Generatorlist)
            {
                Generatorlist.Add(generator.Key, generator.Value);
            }
            toMerge.Generatorlist.Clear();

            foreach (var device in toMerge.Deviceloadlist)
            {
                Deviceloadlist.Add(device);
            }
            toMerge.Deviceloadlist.Clear();

            DepoweredDevices.AddRange(toMerge.DepoweredDevices);
            toMerge.DepoweredDevices.Clear();

            PowerStorageSupplierlist.AddRange(toMerge.PowerStorageSupplierlist);
            toMerge.PowerStorageSupplierlist.Clear();

            PowerStorageConsumerlist.AddRange(toMerge.PowerStorageConsumerlist);
            toMerge.PowerStorageConsumerlist.Clear();

            toMerge.RemoveFromSystem();
        }
示例#3
0
 public Graph()
 {
     edges = new Edgelist(1);
     nodes = new Nodelist(1);
     scale = 1;
 }
示例#4
0
 public Graph(double epsilon)
 {
     edges = new Edgelist(epsilon);
     nodes = new Nodelist(epsilon);
     scale = 1;
 }