Я хочу написать программу типа «книга рецептов» (C ++) для игры, в которую я играю, в которой каждый ингредиент будет узлом, и ему будет назначен уровень в зависимости от сложности ингредиента. Я хочу использовать ориентированный граф с ребром, представляющим, что один ингредиент идет на создание другого; Я пытаюсь что-то вроде этого. Я буду обходить график, проходя через каждый узел на самом высоком уровне, затем каждый узел на следующем уровне и так далее. Поэтому каждый раз, когда я прохожу его, путь будет точно таким же.
Я знаю, что граф может быть реализован с использованием списка смежности, но это кажется излишним, учитывая, что обход всегда один и тот же и имеет общее направление к нему. Есть ли другой способ; и если да, то что это?
если вы хотите рецепт ингредиентов, который состоит из нескольких частей
std::map<unsigned int, std::vector<std::string>> myRecipeMap;
это дало бы вам сложность, пара ингредиентов, где сложность может быть количеством частей ингредиента, например, некоторые вещи состоят из яичного белка и муки для приготовления лапши.
если вам нужно несколько сложностей
std::multimap<unsigned int, std::vector<std::string>>> myRecipeMap;
если вам просто нужна сложность отношения ингредиент имя
std::map<unsigned int, std::string> RecipeBook;
и снова множественные сложности
std::multimap<unsigned int, std::string> RecipeBook;
это даст вам сложность для рецепта ингредиента, но не его подкомпонентов
Я уверен, что вы знаете, что std :: map — это красное чёрное двоичное дерево поиска, и хотя оно НЕ является графом, я прошу прощения за этот ответ, если вы выбрали это упражнение специально для того, чтобы научиться писать граф. std :: multimap — это отсортированный список.
Все это может быть выполнено более простым и, возможно, более быстрым, более неуклюжим образом, с вектором пар int и вектором строк для нескольких частей ingrideant или парой int и string только для имени ingrideant.
Если вы хотите иметь сложность и название ингредиента вместе с его подкомпонентами
std::map<unsigned int, std::pair<std::string, std::vector<std::string>> Recipe;
Компоненты стандартной библиотеки полностью способны создавать некоторые довольно сложные структуры данных, способные удовлетворить практически любые проблемы.
И последнее, почему бы не отказаться от такой сложности и использовать базу данных, такую как SQLite, MySql, MS SQL (сервер Developmemt поставляется с бесплатной Visual Studio)?
Других решений пока нет …