Рекурсия, Arraylist добавляется значение, цикл foreach - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, форум, заинтересован в одном алгоритме, суть его такова - ищет соседей по клеточке (x,y) Критерии таковы, если есть в ArrayList Coordinats элементы со следующими значениями (x+1,y) (x-1,y) (x,y+0.1) (x,y-0.1) //Для простоты эксперимента задал их в типе double, где целое число - координата x, а десятичная дробь - y, например : 3,9 соответствует координате x=3; y=9; (Извиняюсь за такой велосипед, с двумерными массивами никак не удалось)
            ArrayList coordinates = new ArrayList{ 2.2, 3.2, 4.2, 4.1, 3.4, 4.4, 3.5 };
            ArrayList Sstar = new ArrayList();
            ArrayList check = new ArrayList();

            foreach (double point in coordinates)
            {
                ArrayList buff = new ArrayList();
                buff.Add(point);
            
                foreach (double eleim in buff) // ТУТ ВОЗНИКЛА СЛОЖНОСТЬ:(
                {
                    if (check.Contains(eleim) == false)
                    {
                        double y_swarpUp = -0.1;
                        double y_swarpDown = 0.1;
                        double x_swarpUp = -1;
                        double x_swarpDown = 1;
                        double value = 0;

                        value = eleim + x_swarpUp;
                        if (check.Contains(value) == false)
                        {
                            buff.Add(value);
                            check.Add(value);
                        }
                        value = eleim + y_swarpUp;
                        if (check.Contains(value) == false)
                        {
                            buff.Add(value);
                            check.Add(value);
                        }
                        value = eleim + y_swarpDown;
                        if (check.Contains(value) == false)
                        {
                            buff.Add(value);
                            check.Add(value);
                        }
                        value = eleim + x_swarpDown;
                        if (check.Contains(value) == false)
                        {
                            buff.Add(value);
                            check.Add(value);
                        }
                    }
                    check.Add(point);
                    //goto Searching;
                }
            int count = buff.Count;
            if (count > 0)
                Sstar.Add(count);
            }

            foreach(int w in Sstar)
            {
                MessageBox.Show("Площадь элемента:"+w.ToString());
            }
возникла сложность в цикле foreach для ArrayList buff, которого я изменяю, как мне сделать так, чтобы цикл форэйч работал для новых элементов тоже? Алгоритм таков(для всех элементов buff), что если находится клетки-соседи, как указано выше, то в каждой этой клетке ищется свои соседи и добавляются в buff(АрЛист для всех клеток) исключая уже проверенные комбинации, которые я заношу в check

Решение задачи: «Рекурсия, Arraylist добавляется значение, цикл foreach»

textual
Листинг программы
        public IEnumerable<Node> AllNodes(Node start)
        {
            LinkedList<Node> lst = new LinkedList<Node>();
            lst.AddFirst(start);
            while (lst.Count > 0)
            {
                var fst = lst.First.Value;
                lst.RemoveFirst();
                yield return fst;
                foreach (Node nd in fst.Children) lst.AddLast(nd);
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.667 из 5