Нужно, чтобы функция создания вершины присваивала ей случайные координаты - C#

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

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

Здравствуйте, я пишу программу, которая генерирует графы и мне нужно, чтобы функция создания вершины присваивала ей случайные координаты и радиус окружности с центром в этой вершине, но для каждой вершины все эти параметры получаются одинаковыми. Скорее всего, проблема в методах creatingNode и конструкторе Graph.
Листинг программы
  1. public class Graph
  2. {
  3. public struct node // Структура для хранения вершин
  4. {
  5. public int id; // Уникальный идентификатор
  6. public double radius; // Радиус приёмопередатчика
  7. public double x; // Абсцисса
  8. public double y; // Ордината
  9. public int degree; // Степень вершины
  10. public List<int> arclist; // Список вершин, смежных данной
  11. };
  12. public List<node> nodes = new List<node>(); // Вектор вершин графа
  13. int numberOfNodes; // Количество вершин
  14. public int numberOfArcs; // Количество рёбер
  15. bool connected; // Хранит true, если граф связный, или false, если это не так
  16. double generalRadius; // Если радиус всех вершин одинаковый, то он хранится здесь, в противном случае generalRadius = -1
  17. //double instantOfTime;
  18. Random rand = new Random(unchecked((int)(DateTime.Now.Ticks)));
  19. static double GenerateDigit(Random rng)
  20. {
  21. return Convert.ToDouble(rng.Next(100));
  22. }
  23. private node creatingNode(int inId) // Функция генерирует вершину с id=inId
  24. {
  25. node outNode = new node();
  26. outNode.id = inId;
  27. outNode.degree = 0;
  28. outNode.radius = GenerateDigit(rand) / 100;
  29. outNode.x = GenerateDigit(rand) / 10;
  30. outNode.y = GenerateDigit(rand) / 10;
  31. List<int> parclist = new List<int>();
  32. outNode.arclist = parclist;
  33. return outNode;
  34. }
  35. private void addingArc( node node1, node node2) // Связывает ребром вершины node1 и node2
  36. {
  37. node1.arclist.Add(node2.id);
  38. node1.degree++;
  39. node2.arclist.Add(node1.id);
  40. node2.degree++;
  41. numberOfArcs++;
  42. }
  43. double calculatingDistance(node node1, node node2) // Вычисляет расстояние между вершинами node1 и node2
  44. {
  45. return Math.Sqrt((node2.x - node1.x) * (node2.x - node1.x) + (node2.y - node1.y) * (node2.y - node1.y));
  46. }
  47. bool arcExist(node node1, node node2) // Проверяем, достаёт ли сигнал одной вершины до другой
  48. {
  49. if (node2.radius >= calculatingDistance(node1, node2) || node1.radius >= calculatingDistance(node1, node2))
  50. return true;
  51. else
  52. return false;
  53. }
  54. public bool isConnected() // Выясняет, является ли граф связным
  55. {
  56. for (int i = 0; i < nodes.Count(); i++)
  57. if (nodes[i].degree == 0)
  58. return false;
  59. return true;
  60. }
  61. public Graph() // Генерирует граф
  62. {
  63. numberOfNodes = rand.Next(99) + 2; // Задаём количество вершин от 2 до 100
  64. for (int i = 0; i < numberOfNodes; i++) // Заполняем вектор nodes вершинами
  65. {
  66. node cNode = new node();
  67. cNode = creatingNode(i);
  68. nodes.Add(cNode);
  69. }
  70. for (int i = 0; i < nodes.Count(); i++) // Связываем нужные вершины рёбрами
  71. for (int j = 0; j < nodes.Count(); j++)
  72. if (arcExist(nodes[i], nodes[j]) && i < j)
  73. addingArc( nodes[i], nodes[j]);
  74. //connected = isConnected(); // Обозначаем связность сгенерированного графа
  75. //generalRadius = isGeneralRadius(); // И его generalRadius
  76. }
Результаты вот такие: 0.07 6.2 3 0.07 6.2 3 0.07 6.2 3 0.07 6.2 3 Первое число - радиус, второе - абсцисса, третье - ордината

Решение задачи: «Нужно, чтобы функция создания вершины присваивала ей случайные координаты»

textual
Листинг программы
  1. foreach (Graph.node item in new Graph().nodes)
  2. {
  3.     Console.WriteLine("{0} {1} {2}", item.radius, item.x, item.y);
  4. }

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


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

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

12   голосов , оценка 3.833 из 5

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

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

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