Рекурсия, 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д