Рекурсия, 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);
}
}