Рекурсия, 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;
(Извиняюсь за такой велосипед, с двумерными массивами никак не удалось)
возникла сложность в цикле foreach для ArrayList buff, которого я изменяю, как мне сделать так, чтобы цикл форэйч работал для новых элементов тоже?
Алгоритм таков(для всех элементов buff), что если находится клетки-соседи, как указано выше, то в каждой этой клетке ищется свои соседи и добавляются в buff(АрЛист для всех клеток) исключая уже проверенные комбинации, которые я заношу в check
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()); }
Решение задачи: «Рекурсия, 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д