/// <summary> /// Создание нового экземлпяра графа на основе указанного списка смежности. /// </summary> /// <param name="list">Исходный список смежности.</param> /// <returns>Новый экземпляр графа.</returns> public static MainGraph GenerateGraph(AdjacencyList list, int medCount, int villCount) { if (list == null) { return(null); } AdjacencyList.PrintGraph(list); MainGraph graph = new MainGraph(); for (int i = 0; i < villCount; i++) { graph.AddVertex(new DataVertex()); } for (int i = villCount; i < list.VertexCount; i++) { graph.AddVertex(new DataVertex(VertexColor.Unmarked, VertexType.Unmarket, Utility.Rand.Next(999) + 1)); } for (int i = 0; i < list.VertexCount; i++) { foreach (int j in list.GetAdjacent(i)) { if (list.IsDirected || !list.IsDirected && j > i) { var source = graph.Vertices.ElementAt(i); var target = graph.Vertices.ElementAt(j); graph.AddEdge(new DataEdge(source, target, Utility.Rand.Next(9) + 1)); } } } return(graph); }
public MainGraph Generate() { var list = new AdjacencyList(vertexCount); int size = vertexClinic + vertexAmbulator; MainGraph graph = new MainGraph(); for (int i = 0; i < vertexVillage; i++) { graph.AddVertex(new DataVertex(VertexColor.GroupeVillage, VertexType.GroupeVillage, Utility.Rand.Next(50, 10000))); } for (int i = vertexVillage; i < vertexVillage + vertexClinic; i++) { graph.AddVertex(new DataVertex(VertexColor.GroupeClinic, VertexType.GroupeClinic, Utility.Rand.Next(10, 9999) + Math.Round(Utility.Rand.NextDouble(), 3))); } for (int i = vertexVillage + vertexClinic; i < vertexVillage + vertexClinic + vertexAmbulator; i++) { graph.AddVertex(new DataVertex(VertexColor.GroupeMedic, VertexType.GroupeMedic, Utility.Rand.Next(10, 9999) + Math.Round(Utility.Rand.NextDouble(), 3))); } for (int v = 0; v < vertexVillage; v++) { for (int c = vertexVillage; c < vertexCount; c++) { var source = graph.Vertices.ElementAt(v); var target = graph.Vertices.ElementAt(c); graph.AddEdge(new DataEdge(source, target, Utility.Rand.Next(1, 9999) + Math.Round(Utility.Rand.NextDouble(), 3))); } } return(graph); }
} //выбранный текущий город (для построения дороги) public void AddCity(string name, float x, float y) //добавить город { City city = new GenericGraph.City(name); city.Pos = new PointF(x, y); MainGraph.AddVertex(city); }