回答
看到你想要的抽象数据类型,我不会提及任何有关实现。
的曲线G = <V, E>
是一组顶点的V
,和一组边缘E
其中E
每个元素是一个元组e = <v1, v2>
,和v1
和v2
在V
的。
下可能看起来像Java,但我真的想任何足够表现力的语言:
interface Graph {
Set getVertices();
Set getEdges();
void addVertex(Object v);
void addEdge(Object v1, Object v2);
void removeVrtex(Object v);
void removeEdge(Object v1, Object v2);
}
我觉得这是最起码的。我没有指定getEdges
返回的内容;如果语言具有本地元组类型,那么它将是一组元素。在实践中,你会希望添加额外的方法,如:
int getDegree(Object v);
void contractEdge(Object v1, Object v2);
boolean isIsthmus(Object v1, Object v2); /* does removal of this edge increase the number of components? */
int numComponents();
boolean isConnected(); /* return numComponents() <= 1 */
boolean isCycle(Set path); /* path is a set of edges. */
等
扩大这有向图留作练习:-)
。
当图形很稀疏时,Map<Vertex, List<Vertex>>
(1)会做。如果密度很大,也可以使用2D阵列(2)。
参见:
听起来不错。我宁愿使用地图。 – DarthVader 2009-11-04 22:52:42
用于存储图的最常见结构中的两个是adjacency lists和adjacency matrices。使用哪种方法通常取决于您计划如何处理图表(因为对于给定的算法,可以提供比其他算法更优化的操作/访问时间)以及图表的稀疏性或密度(列表是对于稀疏图更紧凑,矩阵相对于图的密度更小)。
我知道邻接表和矩阵,再加上有incidency list和matrix。但是什么数据结构与他们一起? – DarthVader 2009-11-04 22:50:46
- 1. 下载适用于Android的ADT插件
- 2. 适用于Linux的BGI图形?
- 3. 适用于iPhone的图形API
- 4. 适用于Android的有氧图形
- 5. 适用于iOS 2D游戏的图形
- 6. 日食ADT图形布局
- 7. 图形不适用于java游戏
- 8. 使用适用于Android和ADT的Google Cloud Endpoints
- 9. 适用于图形应用的快速Pixel Precision 2D绘图API?
- 10. 适用的iPhone图形库
- 11. R14 ADT不适用于我从GitHub克隆的项目
- 12. 适用于Mac的ADT Bundle:Eclipse无法启动
- 13. 我在哪里可以获得适用于Eclipse 3.5的ADT 0.9.6?
- 14. 适用于mac的ADT套件已损坏
- 15. 无法安装适用于Eclipse Helios 3.6.2的Android ADT插件
- 16. 用于理解的ADT
- 17. 适用于Android开发人员的最佳图书馆(图形)
- 18. 实现图形ADT在C++中
- 19. 错误与ADT /图形布局
- 20. Android ADT 21.0.0。在图形布局
- 21. 适用于iPhone4的图标/图像(@ 2x)适用于iPhone 3GS?
- 22. 适用于OpenGL /通用图形的最佳动态语言
- 23. Android 9补丁图像仅适用于单色方形图像?
- 24. 用于显示坐标数据的最合适的图形
- 25. 的DrawString只适用于形式vb.net
- 26. 适用于Android的条形码库
- 27. 正在处理(2D图形)适用于较大的项目?
- 28. iphone上的客户端事件不适用于morris条形图
- 29. 适用于iPad的横向和纵向图形
- 30. 适用于WindowsXP的Direct2D等效2D图形API
:)是的,图中有很多东西。凉。谢谢。 – DarthVader 2009-11-04 23:16:53