namespace DrawGraph { public class Matrix { public static int[,] AdjacencyCreate(Vertex[] vertices, Edge[] edges) { int length = vertices.Length; int[,] matrix = new int[length, length]; for (int i = 0; i < vertices.Length; i++) { var vertex1 = vertices[i]; for (int j = 0; j < vertices.Length; j++) { if (i != j) { var vertex2 = vertices[j]; for (int k = 0; k < edges.Length; k++) { var edge = edges[k]; if (edge.IsFocused) { if (Vertex.Compare(edge.FinishVertex, vertex1) && Vertex.Compare(edge.StartVertex, vertex2)) if (edge.Weight > 0) matrix[i, j] = (int) edge.Weight; else matrix[i, j] = 1; else if (Vertex.Compare(edge.StartVertex, vertex1) && Vertex.Compare(edge.FinishVertex, vertex2)) if (edge.Weight > 0) matrix[i, j] = (int) edge.Weight; } else { if (Vertex.Compare(edge.FinishVertex, vertex1) && Vertex.Compare(edge.StartVertex, vertex2)) if (edge.Weight > 0) { matrix[i, j] = (int) edge.Weight; InvertElement(matrix, i, j); } else { matrix[i, j] = 1; InvertElement(matrix, i, j); } else if (Vertex.Compare(edge.StartVertex, vertex1) && Vertex.Compare(edge.FinishVertex, vertex2)) if (edge.Weight > 0) { matrix[i, j] = (int) edge.Weight; InvertElement(matrix, i, j); } else { matrix[i, j] = 1; InvertElement(matrix, i, j); } } } } else { matrix[i, j] = 0; } } } return matrix; } public static int[,] InvertElement(int[,] matrix, int indexX, int indexY) { matrix[indexY, indexX] = matrix[indexX, indexY]; return matrix; } public static int[,] IncidenceCreate(Vertex[] vertices, Edge[] edges) { var rows = vertices.Length; var cols = edges.Length; var matrix = new int[rows, cols]; for (var i = 0; i < rows; i++) { var vertex = vertices[i]; for (var j = 0; j < cols; j++) { var edge = edges[j]; if (Vertex.Compare(vertex, edge.FinishVertex) && edge.IsFocused) matrix[i, j] = -1; else { if (Vertex.Compare(vertex, edge.FinishVertex) || Vertex.Compare(vertex, edge.StartVertex)) if (edge.Weight > 0) matrix[i, j] = (int)edge.Weight; else matrix[i, j] = 1; else matrix[i, j] = 0; } } } return matrix; } } }