Как реализовать ориентированный граф в C ++ без использования списка смежности, учитывая, что путь прохождения будет одинаковым каждый раз?

[Отказ от ответственности: у меня пока нет кода, только концепции! Помогите с запуском кода вообще, вот почему я здесь]

Я хочу написать программу типа «книга рецептов» (C ++) для игры, в которую я играю, в которой каждый ингредиент будет узлом, и ему будет назначен уровень в зависимости от сложности ингредиента. Я хочу использовать ориентированный граф с ребром, представляющим, что один ингредиент идет на создание другого; Я пытаюсь что-то вроде этого. Я буду обходить график, проходя через каждый узел на самом высоком уровне, затем каждый узел на следующем уровне и так далее. Поэтому каждый раз, когда я прохожу его, путь будет точно таким же.

Я знаю, что граф может быть реализован с использованием списка смежности, но это кажется излишним, учитывая, что обход всегда один и тот же и имеет общее направление к нему. Есть ли другой способ; и если да, то что это?

1

Решение

если вы хотите рецепт ингредиентов, который состоит из нескольких частей

 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)?

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector