private void removeOrientedEdge(int nodeValue1, int nodeValue2) { NodeAdj nodeAdj = null; if (!Nodes.TryGetValue(nodeValue1, out nodeAdj)) { nodeAdj = new NodeAdj(); } nodeAdj.removeNode(nodeValue2); }
private void addOrientedEdge(int nodeValue1, int nodeValue2) { NodeAdj nodeAdj = null; if (!Nodes.TryGetValue(nodeValue1, out nodeAdj)) { nodeAdj = new NodeAdj(); Nodes.Add(nodeValue1, nodeAdj); } nodeAdj.addNode(nodeValue2); }
public void removeNode(int value) { NodeAdj nodeAdj = null; if (Nodes.TryGetValue(value, out nodeAdj)) { List <int> adjacencyNodes = nodeAdj.AdjacencyNodes; foreach (int adjacencyNode in adjacencyNodes) { NodeAdj tempNode = null; if (Nodes.TryGetValue(adjacencyNode, out tempNode)) { tempNode.removeNode(value); } } } Nodes.Remove(value); }
private static void testGraph(Graph graph) { Random random = new Random(); for (int i = 0; i < 25; i++) { double probability = random.NextDouble(); if (i < 13) { probability += 0.6; } else if (i > 20) { if (graph.IsEmpty()) { return; } if (random.NextDouble() > 0.5) { probability = 0.5; } } Console.WriteLine("------------------------------------------------------------"); Console.WriteLine(i + ".Вероятность = " + probability); Console.WriteLine("------------------------------------------------------------"); int node1 = random.Next(MAX_NODES); int node2 = node1; while (node2 == node1) { node2 = random.Next(MAX_NODES); } if (probability < 0.4) { NodeAdj nodeAdj = null; bool isSuccess; int count = 0; do { node1 = random.Next(MAX_NODES); isSuccess = graph.Nodes.TryGetValue(node1, out nodeAdj); if (isSuccess) { count = nodeAdj.AdjacencyNodes.Count; } } while (!isSuccess && count == 0); int index = random.Next(0, nodeAdj.AdjacencyNodes.Count - 1); node2 = nodeAdj.AdjacencyNodes[index]; Console.WriteLine("Удаление ребра (" + node1 + ", " + node2 + ")"); graph.removeEdge(node1, node2); } else if (probability > 0.6) { Console.WriteLine("Добавление ребра (" + node1 + ", " + node2 + ")"); graph.addEdge(node1, node2); } else { NodeAdj nodeAdj = null; while (!graph.Nodes.TryGetValue(node1, out nodeAdj)) { node1 = random.Next(MAX_NODES); } Console.WriteLine("Удаление вершины " + node1); graph.removeNode(node1); } Console.WriteLine(); graph.printAdjacencyList(); Console.WriteLine(); } }