Нужно, чтобы функция создания вершины присваивала ей случайные координаты - C#
Формулировка задачи:
Здравствуйте, я пишу программу, которая генерирует графы и мне нужно, чтобы функция создания вершины присваивала ей случайные координаты и радиус окружности с центром в этой вершине, но для каждой вершины все эти параметры получаются одинаковыми.
Скорее всего, проблема в методах creatingNode и конструкторе Graph.
Результаты вот такие:
0.07 6.2 3
0.07 6.2 3
0.07 6.2 3
0.07 6.2 3
Первое число - радиус, второе - абсцисса, третье - ордината
Листинг программы
- 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
- }
Решение задачи: «Нужно, чтобы функция создания вершины присваивала ей случайные координаты»
textual
Листинг программы
- foreach (Graph.node item in new Graph().nodes)
- {
- Console.WriteLine("{0} {1} {2}", item.radius, item.x, item.y);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д