Нужно, чтобы функция создания вершины присваивала ей случайные координаты - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д