在每次遍历的路径都相同的情况下,我如何在不使用邻接列表的情况下在C++中实现有向图



【免责声明:我还没有任何代码,只有概念!帮助启动代码是我来这里的原因】

我想为我正在玩的游戏编写一个"食谱"类型的程序(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和一对字符串的向量来表示一个内嵌体的多个部分,或者用一对整型和一对string来表示内嵌体的名称。如果你想有复杂性和成分名称及其子成分

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

标准库组件是完全组合的,能够创建一些非常复杂的数据结构,几乎可以容纳任何问题。

最后,为什么不放弃这种复杂性,使用像SQLite、MySql、MSSQL这样的数据库(development服务器附带免费的visual studio(?

相关内容

最新更新