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

我想为我正在玩的游戏编写一个“食谱书”类型的程序(C++),其中每个成分将是一个节点,并将根据成分的复杂性分配一个层。我想使用有向图,其边缘代表一种成分正在制造另一种成分; I'm trying for something like this。我将遍历最高层的每个节点,然后遍历下一层的每个节点,以此类推。因此,每次我遍历它时,路径都会完全相同。

我知道可以使用邻接表来实现图,但是考虑到遍历始终是相同的,并且具有单一的总体方向,因此这似乎有点过头了。还有另一种方法吗?如果是这样,那是什么?

最佳答案

如果您想要包含多个部分的配方原料

 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成对的 vector 和一个iningrideant的多个部分的字符串 vector ,或者一对int和string的一个iningrideant名称。
如果您想要复杂性和成分名称及其子成分
 std::map<unsigned int, std::pair<std::string, std::vector<std::string>> Recipe;

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

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

关于c++ - 考虑到遍历的路径每次都相同,如何在C++中实现有向图而不使用邻接表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53403667/

10-11 22:55
查看更多