Что подразумевается под словами "реализовать граф принятия решений"?
Т.е. у меня на листе нарисован граф вариантов:
1 -> 2 -> 4 -> победа.
______ -> 5 -> 7 -> поражение.
__-> 3 -> 6 -> победа.
Т.е. программа может пойти разными путями, возможно пересекающимися, возможно нет. Правильно ли я понимаю, что реализация состоит в том, что бы описать все эти варианты с помощью операторов ветвления (if-else-switch etc.)? Или есть какие-то секретные програмистские техники, которые позволяют это делать: может специальный тип данных, который бы позволил менять это дерево динамически?
upd: уточню. Не совсем "программа может пойти разными путями". Путь всегда один, но действие разное. Пытаюсь реализовать бота для игры, который бы анализировал сделанные ходы и делал свой.
ну, дискретную математику я когда-то учил, так что на листочке я могу и граф нарисовать и даже кратчайший путь посчитать. Но вот как это соотносится с программированием - не вполне понимаю.
Единственная "секретная" техника, которая тут мне приходит на ум - патерн "Цепочка обязанностей", вместо Ваших if - elseif - else - switch - case -default, которые в графах будут в огромнейшем количестве...
Хотя это детали реализации, сама теория графов от этого не меняется.
Для начала это вообще не граф. Это дерево. Молодой программист решид написать игру? Похвально, молодец.
Тем ни менее подходы похожи. Гуглите информацию по темам "обход дерева", "обход графа". Пример обхода - это либо "поиск в ширину", либо "поиск в глубину".
И там и там принцип - рекурсии (это когда входишь в тот же самый метод внутри того же метода).
Боже упаси if-else. Если граф или дерево будет динамическое и меняться от 100 до 1000 000 ветвей, то все 1000 000 будем описывать?