Graph.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. // Класс для графа
  5. public class Graph
  6. {
  7. // Список вершин в графе
  8. public List<Vertex> Vertices { get; set; }
  9. // Конструктор графа
  10. public Graph()
  11. {
  12. Vertices = new List<Vertex>();
  13. }
  14. // Конструктор графа через матрицу
  15. public Graph(int[,] matrix)
  16. {
  17. Vertices = new List<Vertex>();
  18. int n = matrix.GetLength(0);
  19. // Инициализируем список вершин (номера вершин от 1 до количества вершин вкл.)
  20. for (int i = 1; i <= n; i++)
  21. {
  22. Vertex vertex = new Vertex(i);
  23. Vertices.Add(vertex);
  24. }
  25. // Добавить сторону в соответствии с матрицей
  26. for (int i = 0; i < n; i++)
  27. {
  28. for (int j = 0; j < n; j++)
  29. {
  30. if (matrix[i, j] != 0)
  31. {
  32. // откуда, куда, расстояние
  33. Edge edge = new Edge(Vertices[i], Vertices[j], matrix[i, j]);
  34. // Привязываем полученное ребро к ребрам вершины-откуда
  35. // (добавляем это ребро в список ребёр вершины-откуда)
  36. Vertices[i].AddEdge(edge);
  37. }
  38. }
  39. }
  40. }
  41. public void AddVertex(Vertex vertex)
  42. {
  43. Vertices.Add(vertex);
  44. }
  45. public Vertex GetVertexByNumber(int number)
  46. {
  47. for (int i = 0; i < Vertices.Count; i++)
  48. {
  49. if (Vertices[i].Number == number)
  50. {
  51. return Vertices[i];
  52. }
  53. }
  54. return null;
  55. }
  56. }