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

[Отказ от ответственности: у меня пока нет кода, только понятия!Я здесь помогаю с запуском кода, поэтому я здесь]

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

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

1 Ответ

0 голосов
/ 21 ноября 2018

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

 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 и вектором строк для нескольких частей исходного илипара int и string только для имени врожденного.Если вы хотели иметь название сложности и ингредиента вместе с его подкомпонентами

 std::map<unsigned int, std::pair<std::string, std::vector<std::string>> Recipe;

Стандартные библиотечные компоненты целиком и полностью способны создавать довольно сложные структуры данных, способные удовлетворить практически любую проблему.

И последнее, почему бы не отказаться от этой сложности и использовать базу данных, такую ​​как SQLite, MySql, MS SQL (сервер Developmemt поставляется с бесплатной Visual Studio)?

...