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

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

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

Здравствуйте, я пишу программу, которая генерирует графы и мне нужно, чтобы функция создания вершины присваивала ей случайные координаты и радиус окружности с центром в этой вершине, но для каждой вершины все эти параметры получаются одинаковыми. Скорее всего, проблема в методах creatingNode и конструкторе Graph.
public class Graph
        {
            public struct node // Структура для хранения вершин
            {
                public int id; // Уникальный идентификатор
                public double radius; // Радиус приёмопередатчика
                public double x; // Абсцисса 
                public double y; // Ордината
                public int degree; // Степень вершины
                public List<int> arclist; // Список вершин, смежных данной
            };
 
            public List<node> nodes = new List<node>(); // Вектор вершин графа
            int numberOfNodes; // Количество вершин
            public int numberOfArcs; // Количество рёбер
            bool connected; // Хранит true, если граф связный, или false, если это не так
            double generalRadius; // Если радиус всех вершин одинаковый, то он хранится здесь, в противном случае generalRadius = -1
            //double instantOfTime;
            Random rand = new Random(unchecked((int)(DateTime.Now.Ticks)));
 
            static double GenerateDigit(Random rng)
            {
                
                return Convert.ToDouble(rng.Next(100));
            }
 
            private node creatingNode(int inId) // Функция генерирует вершину с id=inId
            {
                node outNode = new node();
                outNode.id = inId;
                outNode.degree = 0;
                outNode.radius = GenerateDigit(rand) / 100;
                outNode.x = GenerateDigit(rand) / 10;
                outNode.y = GenerateDigit(rand) / 10;
                List<int> parclist = new List<int>();
                outNode.arclist = parclist;
                return outNode;
            }
        
            private void addingArc( node node1, node node2) // Связывает ребром вершины node1 и node2
            {
                node1.arclist.Add(node2.id);
                node1.degree++;
                node2.arclist.Add(node1.id);
                node2.degree++;
                numberOfArcs++;
            }
 
            double calculatingDistance(node node1, node node2) // Вычисляет расстояние между вершинами node1 и node2
            {
                return Math.Sqrt((node2.x - node1.x) * (node2.x - node1.x) + (node2.y - node1.y) * (node2.y - node1.y));
            }
 
            bool arcExist(node node1, node node2) // Проверяем, достаёт ли сигнал одной вершины до другой
            {
                if (node2.radius >= calculatingDistance(node1, node2) || node1.radius >= calculatingDistance(node1, node2))
                    return true;
                else
                    return false;
            }
 
            public bool isConnected() // Выясняет, является ли граф связным
            {
                for (int i = 0; i < nodes.Count(); i++)
                    if (nodes[i].degree == 0)
                        return false;
                return true;
            }
 
            public Graph() // Генерирует граф
            {
                numberOfNodes =  rand.Next(99) + 2; // Задаём количество вершин от 2 до 100
 
                for (int i = 0; i < numberOfNodes; i++) // Заполняем вектор nodes вершинами
                {
                    node cNode = new node();
                    cNode = creatingNode(i);
 
                    nodes.Add(cNode);
                }
 
                for (int i = 0; i < nodes.Count(); i++) // Связываем нужные вершины рёбрами
                for (int j = 0; j < nodes.Count(); j++)
                if (arcExist(nodes[i], nodes[j]) && i < j)
                    addingArc( nodes[i],  nodes[j]);    
        
                //connected = isConnected(); // Обозначаем связность сгенерированного графа
                //generalRadius = isGeneralRadius(); // И его generalRadius
            }
Результаты вот такие: 0.07 6.2 3 0.07 6.2 3 0.07 6.2 3 0.07 6.2 3 Первое число - радиус, второе - абсцисса, третье - ордината

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

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

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


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

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

12   голосов , оценка 3.833 из 5
Похожие ответы