Рекурсия, 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; (Извиняюсь за такой велосипед, с двумерными массивами никак не удалось)
Листинг программы
  1. ArrayList coordinates = new ArrayList{ 2.2, 3.2, 4.2, 4.1, 3.4, 4.4, 3.5 };
  2. ArrayList Sstar = new ArrayList();
  3. ArrayList check = new ArrayList();
  4.  
  5. foreach (double point in coordinates)
  6. {
  7. ArrayList buff = new ArrayList();
  8. buff.Add(point);
  9. foreach (double eleim in buff) // ТУТ ВОЗНИКЛА СЛОЖНОСТЬ:(
  10. {
  11. if (check.Contains(eleim) == false)
  12. {
  13. double y_swarpUp = -0.1;
  14. double y_swarpDown = 0.1;
  15. double x_swarpUp = -1;
  16. double x_swarpDown = 1;
  17. double value = 0;
  18.  
  19. value = eleim + x_swarpUp;
  20. if (check.Contains(value) == false)
  21. {
  22. buff.Add(value);
  23. check.Add(value);
  24. }
  25. value = eleim + y_swarpUp;
  26. if (check.Contains(value) == false)
  27. {
  28. buff.Add(value);
  29. check.Add(value);
  30. }
  31. value = eleim + y_swarpDown;
  32. if (check.Contains(value) == false)
  33. {
  34. buff.Add(value);
  35. check.Add(value);
  36. }
  37. value = eleim + x_swarpDown;
  38. if (check.Contains(value) == false)
  39. {
  40. buff.Add(value);
  41. check.Add(value);
  42. }
  43. }
  44. check.Add(point);
  45. //goto Searching;
  46. }
  47. int count = buff.Count;
  48. if (count > 0)
  49. Sstar.Add(count);
  50. }
  51.  
  52. foreach(int w in Sstar)
  53. {
  54. MessageBox.Show("Площадь элемента:"+w.ToString());
  55. }
возникла сложность в цикле foreach для ArrayList buff, которого я изменяю, как мне сделать так, чтобы цикл форэйч работал для новых элементов тоже? Алгоритм таков(для всех элементов buff), что если находится клетки-соседи, как указано выше, то в каждой этой клетке ищется свои соседи и добавляются в buff(АрЛист для всех клеток) исключая уже проверенные комбинации, которые я заношу в check

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

textual
Листинг программы
  1.         public IEnumerable<Node> AllNodes(Node start)
  2.         {
  3.             LinkedList<Node> lst = new LinkedList<Node>();
  4.             lst.AddFirst(start);
  5.             while (lst.Count > 0)
  6.             {
  7.                 var fst = lst.First.Value;
  8.                 lst.RemoveFirst();
  9.                 yield return fst;
  10.                 foreach (Node nd in fst.Children) lst.AddLast(nd);
  11.             }
  12.         }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут