/// <summary> Добавление вершины в список </summary> public void SelectRMouseClick(IVertex clickedVertex) { var vertex = GivenGraph.Vertices.Single(clickedVertex.Equals); // Если вершину уже добавили - то удаляем. if (DomSet.Contains(vertex)) { VertVisCol[Convert.ToInt32(vertex.Name)].Background = new SolidColorBrush(_defaultBackgroundColor); Matrix[Convert.ToInt32(vertex.Name)].Background = new SolidColorBrush(Color.FromArgb(250, 239, 240, 250)); VertVisCol[Convert.ToInt32(vertex.Name)].BorderBrush = new SolidColorBrush(_defaultBorderColor); DomSet.Remove(vertex); foreach (var edge in EdgeVisCol) { if ((edge.Vertex1.Name == vertex.Name) || (edge.Vertex2.Name == vertex.Name)) { edge.Stroke = new SolidColorBrush(_defaultBorderColor); } } foreach (var vert in DomSet) { foreach (var edge in EdgeVisCol) { if ((edge.Vertex1.Name == vert.Name) || (edge.Vertex2.Name == vert.Name)) { edge.Stroke = new SolidColorBrush(Color.FromArgb(255, 243, 117, 117)); } } } return; } DomSet.Add(vertex); Matrix[Convert.ToInt32(vertex.Name)].Background = new SolidColorBrush(Color.FromArgb(250, 230, 207, 207)); VertVisCol[Convert.ToInt32(vertex.Name)].Background = new SolidColorBrush(Color.FromArgb(250, 230, 207, 207)); VertVisCol[Convert.ToInt32(vertex.Name)].BorderBrush = new SolidColorBrush(Color.FromArgb(255, 243, 117, 117)); foreach (var edge in EdgeVisCol) { if ((edge.Vertex1.Name == vertex.Name) || (edge.Vertex2.Name == vertex.Name)) { edge.Stroke = new SolidColorBrush(Color.FromArgb(255, 243, 117, 117)); } } //UserActionsManager.RegisterInfo(string.Format("Выбрана вершина: {0}", clickedVertex.Name)); }
/// <summary> /// Проверка выбранного множества вершин на соответствие множеству внешней устойчивости /// </summary> /// <returns></returns> private bool ValidateSet() { var isAdded = false; var setChecker = new CheckSet(); bool isExternal = setChecker.IsExternalStability(DomSet, GivenGraph); var sccStr = new MdsRowViewModel(DomSet, _dsCount - _countOfSes + 1); var isMinimal = setChecker.IsMinimal(DomSet, GivenGraph); // какое множество проверяем UserActionsManager.RegisterInfo("Внешняя устойчивость. Задание 2. На проверку отправлено множество: " + sccStr.VerticesView); if (isExternal) { if (isMinimal) { //Поиск выбранного множества в списке всех множеств ??? foreach (var sccRow in MdsRows) { if (sccRow.VerticesView == sccStr.VerticesView) { isAdded = true; break; } } //Проверка на уже добавленность выбранного множества if (isAdded) { MessageBox.Show("Множество " + sccStr.VerticesView + " уже добавлено."); if (UserActionsManager.Score > 2) { UserActionsManager.RegisterMistake("Множество " + sccStr.VerticesView + " уже добавлено.", 2); } else if (UserActionsManager.Score > 0) { UserActionsManager.RegisterMistake("Множество " + sccStr.VerticesView + " уже добавлено.", (short)UserActionsManager.Score); } } else { MdsRows.Add(sccStr); --_countOfSes; //Выбрано достаточное количество множеств внешней устойчивости if (_countOfSes == 0) { UserActionsManager.RegisterInfo("Внешняя устойчивость. Задание 2 завершено. "); MessageBox.Show("Задание 2 пройдено.\n Вы перешли к заданию 3.\n Ознакомьтесь со справкой.<?>"); _task = Task.TaskFindMinDomSets; } if (UserActionsManager.Score > _countOfSes) { UserActionsManager.RegisterInfo(string.Format(@"Множество добавлено. Осталось {0} множеств(о).", _countOfSes)); } else if (UserActionsManager.Score > 0) { UserActionsManager.RegisterInfo(string.Format(@"Множество добавлено. Осталось {0} множеств(о).", UserActionsManager.Score)); } } //Очищаем текущее множество выбранных вершин DomSet.Clear(); //Визуальное изменение выбранных элементов foreach (var vertex in VertVisCol) { vertex.BorderBrush = new SolidColorBrush(_defaultBorderColor); vertex.Background = new SolidColorBrush(_defaultBackgroundColor); Matrix[Convert.ToInt32(vertex.Name)].Background = new SolidColorBrush(Color.FromArgb(250, 239, 240, 250)); } foreach (var edge in EdgeVisCol) { edge.Stroke = new SolidColorBrush(_defaultBorderColor); } } else { if (UserActionsManager.Score > 10) { UserActionsManager.RegisterMistake("Это множество вершин не является минимальным.", 10); } else if (UserActionsManager.Score > 0) { UserActionsManager.RegisterMistake("Это множество вершин не является минимальным.", (short)UserActionsManager.Score); } } } else { if (UserActionsManager.Score > 10) { UserActionsManager.RegisterMistake("Это множество вершин не является внешне устойчивым.", 10); } else if (UserActionsManager.Score > 0) { UserActionsManager.RegisterMistake("Это множество вершин не является внешне устойчивым.", (short)UserActionsManager.Score); } } return(true); }