我刚刚阅读了算法入门书中的breadth-first search算法,我手动模拟了算法。我现在要做的是在代码中实现它以进行额外的练习。
我正在考虑从头开始实现所有数据结构(adjacency list,“颜色”,“距离”和“父”数组),但后来我记得那里有图库Python中的Boost图库和其他一些graph APIs。 我也尝试在UVA和Sphere Judge Online上寻找一些与BFS相关的问题,但我不知道哪些问题需要BFS解决方案。
我的问题是练习这些图算法最简单的方法(不仅限于BFS,但在我想实现DFS,Dijkstra,{{ 3}}等。欢迎有实践问题的网站。
答案 0 :(得分:9)
我个人认为理解这些的最好方法是从头开始实现图形表示。
一方面,这将向您展示实际的实施警告,您可以从中了解为什么或为什么不特定算法可能有趣/好/有效/无论如何。另一方面,我认为通过自下而上的方法可以更容易地理解图形及其实际使用,包括其含义(递归,性能/可扩展性,应用程序,替代方案......)。
但也许那就是我。以上是非常个人化的品味。
答案 1 :(得分:1)
我发现你的问题很有趣,我用Google搜索了一下,我找到了JGraphEd。
它并未涵盖所有图形算法,但它看起来像是一个很好的实验工具。
答案 2 :(得分:1)
我同意balpha。真正学习和理解算法的最佳方法是执行。只需选择一种算法并实现它。当您遇到困难或不确定的地方时,请查看一些现有示例。然后,您将能够将自己的思维与理解其他人的思维进行比较,而不是简单地接受所提供的内容。
一旦你学会了你想要的东西,巩固你理解的最好方法就是尝试教给别人或者把它描述给别人。你可能会有一些人愿意听你的话,或者至少你可以为刚学过你的算法的人写一篇博客文章。
但是如果你正在寻找“无痛”,那么也许你应该完全不使用算法; - )
答案 3 :(得分:0)
这里有关于acm问题集的每个问题的描述。您可以看到每个问题的类别,并提示解决它。只需浏览图形相关问题。只有当你试图自己解决问题并且失败时,好的建议就是使用这些提示。
答案 4 :(得分:0)
在实际数据上可视化一些最短路径算法,其中探索区域以黄色显示: