namespace DrawGraph { public class Matrix { public static int[,] AdjacencyCreate(Node[] nodes, Edge[] edges) { int length = nodes.Length; int[,] matrix = new int[length, length]; for (int i = 0; i < nodes.Length; i++) { var Node1 = nodes[i]; for (int j = 0; j < nodes.Length; j++) { if (i != j) { var Node2 = nodes[j]; for (int k = 0; k < edges.Length; k++) { var edge = edges[k]; if (edge.IsFocused) { if (Node.Compare(edge.FinishNode, Node1) && Node.Compare(edge.StartNode, Node2)) if (edge.Weight > 0) matrix[i, j] = (int) edge.Weight; else matrix[i, j] = 1; else if (Node.Compare(edge.StartNode, Node1) && Node.Compare(edge.FinishNode, Node2)) if (edge.Weight > 0) matrix[i, j] = (int) edge.Weight; } else { if (Node.Compare(edge.FinishNode, Node1) && Node.Compare(edge.StartNode, Node2)) 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 (Node.Compare(edge.StartNode, Node1) && Node.Compare(edge.FinishNode, Node2)) 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(Node[] nodes, Edge[] edges) { var rows = nodes.Length; var cols = edges.Length; var matrix = new int[rows, cols]; for (var i = 0; i < rows; i++) { var Node = nodes[i]; for (var j = 0; j < cols; j++) { var edge = edges[j]; if (Node.Compare(Node, edge.FinishNode) && edge.IsFocused) matrix[i, j] = -1; else { if (Node.Compare(Node, edge.FinishNode) || Node.Compare(Node, edge.StartNode)) if (edge.Weight > 0) matrix[i, j] = (int)edge.Weight; else matrix[i, j] = 1; else matrix[i, j] = 0; } } } return matrix; } } }