Example #1
0
 bool InRange(Place place)
 {
     if (place.x < 0 || place.x >= w)
         return false;
     if (place.y < 0 || place.y >= h)
         return false;
     if (map[place.x, place.y] != ' ')
         return false;
     return true;
 }
Example #2
0
        public string MoveAlfa(Place start, Place finish)
        {
            Queue<Brain> queue = new Queue<Brain>(); // очередь для организации алгоритма поиска вширину
            List<Place> visited = new List<Place>(); // список вершин, гду мы уже были

            queue.Clear();
            visited.Clear();

            Brain brain;
            brain.x = start.x;
            brain.y = start.y;
            brain.path = "";

            Place place;
            queue.Enqueue(brain);

            while (queue.Count > 0)
            {
                brain = queue.Dequeue();
                foreach (Brain side in directions)
                {
                    place.x = brain.x + side.x;
                    place.y = brain.y + side.y;
                    if (!InRange(place))
                        continue;
                    if (visited.Contains(place))
                        continue;
                    visited.Add(place);

                    Brain step = new Brain(place, brain.path + side.path);

                    if (place.Equals(finish))
                        return step.path;
                    queue.Enqueue(step);
                }
            }
            return "";
        }
Example #3
0
        public string MoveAbox(Place mouse, Place start, Place finish)
        {
            // mouse - где находится мышка,
            // start - где находится ящик,
            // finish - куда поместить ящик

            if (start.x == finish.x &&
                start.y == finish.y)
                return "";
            map[start.x, start.y] = ' ';

            bool[, , ,] visited = new bool[w, h, w, h];

            Queue<Brain> queue = new Queue<Brain>(); // очередь для организации алгоритма поиска вширину
               // Dictionary<MouseAbox, bool> visited = new Dictionary<MouseAbox, bool>(); // список положения мышки и ящика, гду мы уже были

            queue.Clear();
            //visited.Clear();

            Brain brain;
            brain.mouse = mouse;
            brain.abox = start;
            brain.path = "";

            Place newMouse;
            Place newAbox;

            queue.Enqueue(brain);

            while (queue.Count > 0)
            {
                brain = queue.Dequeue();
                foreach (Dirs side in directions)
                {
                    newMouse.x = brain.mouse.x + side.x;
                    newMouse.y = brain.mouse.y + side.y;

                    if (!InRange(newMouse))
                        continue;

                    if (newMouse.x == brain.abox.x &&
                        newMouse.y == brain.abox.y)
                    {
                        newAbox.x = newMouse.x + side.x;
                        newAbox.y = newMouse.y + side.y;
                        if (!InRange(newAbox))
                            continue;
                    }
                    else
                        newAbox = brain.abox;

                    // MouseAbox ma;               //  для работы со списком Dictionary
                    //ma.mouse = newMouse;
                    //ma.abox = newAbox;

                    //if (visited.ContainsKey(ma))
                    //     continue;
                    //visited.Add(ma, false);

                    if (visited[newMouse.x, newMouse.y, newAbox.x, newAbox.y])
                        continue;
                    visited[newMouse.x, newMouse.y, newAbox.x, newAbox.y] = true;

                    Brain step = new Brain(newMouse, newAbox, brain.path + side.path);

                    if (newAbox.x == finish.x &&
                        newAbox.y == finish.y)
                        return step.path;

                    queue.Enqueue(step);
                }
            }
            return "NO";
        }
Example #4
0
 public Brain(Place mouse, Place abox, string p)
 {
     this.mouse = mouse;
     this.abox = abox;
     path = p;
 }
Example #5
0
 public Brain(Place place, string p)
 {
     this.x = place.x;
     this.y = place.y;
     path = p;
 }