Существует ли какой-либо специальный шаблон или алгоритм разработки для этой проблемы?
Есть несколько элементов (A1, A2, A3 ..An), и я хочу расположить их, некоторые из них связаны сдругие могут быть только до или после них.
Например, А2 можно поместить только после А4, а «An» можно поставить в конце сета.Но дело в том, что последовательность некоторых элементов может быть взаимозаменяемой, и в зависимости от последовательности некоторые элементы не должны быть в наборе.
Например, рассмотрим этот сценарий
Есть 6 элементов
А1, А3, А3, А4, А5, А6
И правила:
А1 должен быть на первом месте (всегда),
А2 может бытьпосле A4
A5 может быть в наборе, только если A3 был там до того, как он
A6 находится в конце комплекта, и это обязательный элемент, но он может быть там, только есливсе остальные действительные предметы были в наборе до этого!
Допустимые комплекты такие:
А1, А4, А3, А2, А5, А6
А1, А4,A2, A6
Неверные наборы
A4, A3, A2, A5, A6 (пропущен A1)
A1, A4, A3, A2, A5 (пропущен A6)
A1, A3, A2, A6 (A2 идет только после A4)
Примечание: я должен подтвердить ввод!и вход может иметь любой порядок!Я имею в виду, я не хочу сортировать элементы, которые я хочу проверить набор ввода от пользователя
В качестве примера, на основе моего примера выше, все приведенные ниже наборы действительны
{A1, A4, A3, A2, A5, A6}
{A1, A4, A2, A3, A5, A6}
{A1, A3, A4, A2, A5, A6}
{A1, A3, A5, A4, A2, A6}
Таким образом, пользователь может ввести любой из них в качестве ввода, и все они действительны на основе определенных условий!
Есть идеи какого-либо специального шаблона проектирования или алгоритма, который можно применить к этой проблеме?Количество предметов или правила могут измениться в будущем!
«BalusC» был удален из моего тега «Design pattern»!Но до сих пор я думаю, что лучшим способом решения этой проблемы может быть командный шаблон.Я имею в виду, что я рассматривал каждый элемент как команду от пользователя и определил процесс проверки для команды («canExecute»). Я собираюсь кодировать его в C #, и, поскольку интерфейс ICommand в .Net имеет метод «canExecute», я думаю, что я будуиспользуйте его для проверки команды на основе условия.(Метод Execute только что добавил элемент в набор результатов!) Я еще не кодировал его, поэтому не уверен, насколько сложным может быть процесс проверки.Я подумал, что, может быть, кто-то имеет представление о том, как я могу комбинировать шаблон команд и алгоритм проверки для достижения целей.
Я могу ошибаться, поэтому любая идея или предложение могут быть полезны.Благодаря.