[免责声明:我还没有任何代码,只有概念!帮助启动代码是我来这里的原因]
我想为我正在玩的游戏编写一个“食谱书”类型的程序 (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 和字符串 vector 来表示一个 ingrideant 的多个部分,或者一对 int 和 string 来表示 ingrideant 的名称。 如果您想获得复杂性和成分名称及其子组件
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/