Matrix.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. namespace DrawGraph
  2. {
  3. public class Matrix
  4. {
  5. public static int[,] AdjacencyCreate(Vertex[] vertices, Edge[] edges)
  6. {
  7. int length = vertices.Length;
  8. int[,] matrix = new int[length, length];
  9. for (int i = 0; i < vertices.Length; i++)
  10. {
  11. var vertex1 = vertices[i];
  12. for (int j = 0; j < vertices.Length; j++)
  13. {
  14. if (i != j)
  15. {
  16. var vertex2 = vertices[j];
  17. for (int k = 0; k < edges.Length; k++)
  18. {
  19. var edge = edges[k];
  20. if (edge.IsFocused)
  21. {
  22. if (Vertex.Compare(edge.FinishVertex, vertex1) &&
  23. Vertex.Compare(edge.StartVertex, vertex2))
  24. if (edge.Weight > 0)
  25. matrix[i, j] = (int) edge.Weight;
  26. else
  27. matrix[i, j] = 1;
  28. else if (Vertex.Compare(edge.StartVertex, vertex1) &&
  29. Vertex.Compare(edge.FinishVertex, vertex2))
  30. if (edge.Weight > 0)
  31. matrix[i, j] = (int) edge.Weight;
  32. }
  33. else
  34. {
  35. if (Vertex.Compare(edge.FinishVertex, vertex1) &&
  36. Vertex.Compare(edge.StartVertex, vertex2))
  37. if (edge.Weight > 0)
  38. {
  39. matrix[i, j] = (int) edge.Weight;
  40. InvertElement(matrix, i, j);
  41. }
  42. else
  43. {
  44. matrix[i, j] = 1;
  45. InvertElement(matrix, i, j);
  46. }
  47. else if (Vertex.Compare(edge.StartVertex, vertex1) &&
  48. Vertex.Compare(edge.FinishVertex, vertex2))
  49. if (edge.Weight > 0)
  50. {
  51. matrix[i, j] = (int) edge.Weight;
  52. InvertElement(matrix, i, j);
  53. }
  54. else
  55. {
  56. matrix[i, j] = 1;
  57. InvertElement(matrix, i, j);
  58. }
  59. }
  60. }
  61. }
  62. else
  63. {
  64. matrix[i, j] = 0;
  65. }
  66. }
  67. }
  68. return matrix;
  69. }
  70. public static int[,] InvertElement(int[,] matrix, int indexX, int indexY)
  71. {
  72. matrix[indexY, indexX] = matrix[indexX, indexY];
  73. return matrix;
  74. }
  75. public static int[,] IncidenceCreate(Vertex[] vertices, Edge[] edges)
  76. {
  77. var rows = vertices.Length;
  78. var cols = edges.Length;
  79. var matrix = new int[rows, cols];
  80. for (var i = 0; i < rows; i++)
  81. {
  82. var vertex = vertices[i];
  83. for (var j = 0; j < cols; j++)
  84. {
  85. var edge = edges[j];
  86. if (Vertex.Compare(vertex, edge.FinishVertex) && edge.IsFocused)
  87. matrix[i, j] = -1;
  88. else
  89. {
  90. if (Vertex.Compare(vertex, edge.FinishVertex) || Vertex.Compare(vertex, edge.StartVertex))
  91. if (edge.Weight > 0)
  92. matrix[i, j] = (int)edge.Weight;
  93. else
  94. matrix[i, j] = 1;
  95. else
  96. matrix[i, j] = 0;
  97. }
  98. }
  99. }
  100. return matrix;
  101. }
  102. }
  103. }