public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) { if (provider != null) { IWindowsFormsEditorService editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (editorService != null) { using (VerticesCollection form = new VerticesCollection()) { form.SelectedObject = ((Vertices)value).ToArray(); form.VerticesReference = (Vertices)value; form.PolygonShapeReference = (PolygonShape)context.Instance; form.PolygonShapeReferenceCopy = (PolygonShape)context.Instance; if (editorService.ShowDialog(form) != System.Windows.Forms.DialogResult.OK) { } } } else { return(base.EditValue(context, provider, value)); } } return(value); }
/// <summary> /// Creates new instance of <see cref="AdjacencyMatrix"/> /// </summary> /// <param name="graph">graph</param> public AdjacencyMatrix(Graph graph) : base(graph.Vertices.Count) { // setting fields this.vertices = graph.Vertices; this.edges = graph.Edges; // constructing graph adjacency matrix this.ConstructAdjacencyMatrix(); }
/// <summary> /// Entry point /// </summary> /// <param name="args">arguments of programm</param> static void Main(string[] args) { try { // testing algorithm implementation Console.WriteLine("Input vertices separeted by comma."); // reading vertices input var verticesInput = Console.ReadLine(); var vertices = verticesInput.Split(new[] { ',' }) .Select(v => new Vertex { Number = int.Parse(v) }) .ToList(); Console.WriteLine("Input edges separated by comma in this way : v1 -> v2 length"); // reading edges input var edgesInput = Console.ReadLine(); var edges = edgesInput.Split(new[] { ',' }) .Select(e => { var input = e.Split(new[] { ' ' }); return(new Edge { First = new Vertex { Number = int.Parse(input[0]) }, Second = new Vertex { Number = int.Parse(input[2]) }, Direction = input[1] == "->" ? EdgeDirection.FromFirstToSecond : input[2] == "<-" ? EdgeDirection.FromSecondToFirst : EdgeDirection.Both, Length = int.Parse(input[3]) }); }) .ToList(); // constructing algoritm-specific structures var verticesCollection = new VerticesCollection(vertices); var edgesCollection = new EdgesCollection(verticesCollection, edges); // constructing graph var graph = new Graph { Vertices = verticesCollection, Edges = edgesCollection }; // constructing adjacency matrix var adjacencyMatrix = new AdjacencyMatrix(graph); // constructing algoritm instance var algorithm = new FWAlgorithm(adjacencyMatrix); // constructing printer for printing algorithm step matrices var printer = new Action <int, string, dynamic>((c, s, m) => { Console.WriteLine($"{s}{c}:"); var color = default(ConsoleColor); const string tab = "\t\t"; const string space = " "; for (var i = 0; i < m.Size; i++) { Console.Write(tab); for (var j = 0; j < m.Size; j++) { color = (ConsoleColor)m[i, j].Color; Console.ForegroundColor = color; Console.Write(m[i, j].Value.ToString().PadLeft(3)); Console.ResetColor(); Console.Write(space); } Console.WriteLine(); } Console.WriteLine(); }); // executing algorithm var count = 0; while (algorithm.Next()) { var step = algorithm.LastStep; printer.Invoke(count, "A", step.A); printer.Invoke(count, "B", step.B); count++; Console.Read(); } } catch (Exception ex) { // printing exception message Console.WriteLine(ex.Message); } finally { // finalizing Console.WriteLine("Hit <Enter> to close..."); Console.ReadLine(); Console.WriteLine("Closing..."); } }