Мне нужно создать инструмент, который позволит бизнес-пользователям создавать опросы. Некоторые вопросы следует задавать только в том случае, если человек, заполнивший анкету, определенным образом ответил на предыдущие вопросы. Но некоторые вопросы должны отображаться независимо от выбранного ответа.
До сих пор я придумал структуру графа, вот теоретический пример того, как она будет выглядеть:
(У меня есть только базовые знания теории графов, поэтому, пожалуйста, извините за выбор слова, которое может быть не таким точным, как могло бы быть)
Круги, такие как A, B, C, представляют собой вопросы, а значение в ссылках представляет собой предварительное условие для доступа к вопросу.
NULL означает, что предварительное условие отсутствует, а значение типа «0» или «1» означает, что предыдущий вопрос должен иметь ответ со значением «0» или «1» для отображения вопроса.
Конкретный пример: я нахожусь в раунде А. У меня есть два возможных ответа. Первый имеет значение «0». Второй - значение «1». Если я выберу ответ со значением «0», я перейду к вопросу B.
Я сейчас в раунде B. Каким бы ни был ответ, я пойду в раунд E, потому что нет никаких предварительных условий.
E - листовой узел, поэтому я возвращаюсь к B. У B есть еще один дочерний узел F без предварительного условия, поэтому я перехожу к вопросу F. Давайте закончим поток на этом.
У меня также может быть один вопрос с несколькими предварительными условиями. Это представлено вопросом N. Доступ к нему возможен только в том случае, если ответ «5» на вопрос F и «DE» на вопрос I. В этом случае, после ответа на вопрос F, поскольку в этом состоянии действует только одно предварительное условие, мы вернется на график, и только после ответа «DE» на вопрос I мы сможем перейти к вопросу N.
Мой вопрос касается алгоритма, который следует использовать для такого опроса. Есть ли существующий алгоритм, охватывающий этот вариант использования? Я думал, что это похоже на обход графа DFS, но условия заставляют меня сомневаться.
Кроме того, не слишком ли я усложняю, и можно ли это выразить гораздо проще? Мне очень нужен совет на этом этапе.
Спасибо за вашу помощь !