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

标签 c++ directed-graph

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

我想为我正在玩的游戏编写一个“食谱书”类型的程序 (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/

相关文章:

python - 在图形实现中查找所有循环

.net - .NET 中的稀疏多维数组或矩阵库

algorithm - 有向图约束最大生成子树的逼近算法

c++ - 与慢消费者异步发送

c++ - 如何在 C++ 中表示二进制字节数组数据?

c++ - libxml/解析器.h : in c++ ubuntu

python - 网络x : getting all possible paths in DAG

algorithm - 对大型无向图进行采样

c++ - 测试超出范围

c++ - 将对象传递给函数不会导致构造函数调用