繁体   English   中英

考虑到遍历的路径每次都是相同的,如何在C ++中实现有向图而不使用邻接表?

[英]How do I implement a directed graph in C++ without using an adjacency list, given that the path of traversal will be the same every time?

[免责声明:我还没有任何代码,只有概念! 根本无法启动代码,这就是为什么我在这里]

我想为我正在玩的游戏编写一个“食谱书”类型的程序(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向量和字符串向量对,或者仅对iningantant的名称使用一对int和字符串对。 如果您想要复杂性和成分名称及其子成分

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

标准库组件完全能够创建一些可以解决几乎所有问题的非常复杂的数据结构。

最后,为什么不放弃这种复杂性,而使用SQLite,MySql,MS SQL这样的数据库(developmemt服务器随免费的Visual Studio一起提供)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM