public void CheckPlan() { for (int i = 0; i < GivenGraph.EdgesCount; ++i) { for (int j = 0; j < GivenGraph.EdgesCount; ++j) { var V1 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[i].Vertex1.Name); var V2 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[i].Vertex2.Name); var V3 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[j].Vertex1.Name); var V4 = VertVisCol.Single(v => v.Name == GivenGraph.Edges[j].Vertex2.Name); if (HaveCollision(V1, V2, V3, V4)) { MessageBox.Show("Проверка графа завершена!\n" + "Граф не плоский"); UserActionsManager.RegisterMistake("Ошибка!", 10); return; } } } MessageBox.Show("Проверка графа завершена!\n" + "Граф плоский! Поздравляем!"); }
//добавление-удаление /// <summary> Инициализация </summary> protected override void OnInitialized() { base.OnInitialized(); InitToolBarCommands(); OnLoadedCmd = new DelegateCommand( o => { VariantProvider.DownloadVariantAsync(); ToolBarCommands.ForEach(c => c.RefreshState()); }, o => true); var outV = new Vertex("a"); VertexClickCmd = new DelegateCommand( o => { if (_state == State.AddEdge1) { outV = GivenGraph.Vertices.Single(v => v.Name == ((IVertex)o).Name) as Vertex; VertVisCol.Single(v => v.Name == outV.Name).Radius = 23; VertVisCol.Single(v => v.Name == outV.Name).Background = new SolidColorBrush(Colors.Magenta); UserActionsManager.RegisterInfo(string.Format("Выходная вершина - [{0}]. Выберите входную вершину.", ((IVertex)o).Name)); _state = State.AddEdge2; return; } if (_state == State.AddEdge2) { var inV = GivenGraph.Vertices.Single(v => v.Name == ((IVertex)o).Name) as Vertex; UserActionsManager.RegisterInfo(string.Format("Входная вершина - [{0}]. Добавьте другое ребро или выйдете из режима добавления ребер", ((IVertex)o).Name)); var newEdge = new DirectedEdge(outV, inV); if (GivenGraph.Edges.Any(newEdge.Equals)) { ReportMistake("Указанная дуга уже существует."); return; } VertVisCol.Single(v => v.Name == outV.Name).Radius = 20; VertVisCol.Single(v => v.Name == outV.Name).Background = new SolidColorBrush(Colors.LightGray); GivenGraph.AddEdge(newEdge); _state = State.AddEdge1; } if (_state == State.RemoveVertex) { GivenGraph.RemoveVertex(GivenGraph.Vertices.Single(v => v.Name == ((IVertex)o).Name)); UserActionsManager.RegisterInfo(string.Format("Вершина [{0}] удалена со всеми связями", ((IVertex)o).Name)); } }, o => true); VisualizerClickCmd = new DelegateCommand( o => { if (_state == State.AddVertex) { UserActionsManager.RegisterInfo((string.Format("Вершина добавлена"))); var vertex = (Graphs.UIComponents.Visualization.Vertex)o; vertex.Name = (GivenGraph.VerticesCount).ToString(); int i = 0; while (GivenGraph.Vertices.Any(vertex.Equals)) { i = i + 1; vertex.Name = (i).ToString(); } } }, o => true); }