在无向图的基础上,稍作修改就可以实现有向图:
1)public void addEdge(int start,int end)
在无向图中要调用2次private void addEdgeToVNodeList(VNodenode,Edge edge),将2个端点的边链表中都加上边,有向图中只需要在一个方向添加
2)public void removeEdge(int start,int end)
同上,只调用一次private void removeEdgeFromVNodeList(VNodenode,Edge edge)
3)public void addVNode(Object element)
没有变化
4)public Object removeVNode(int position)
没有变化
5)public boolean hasEdge(int start,int end)
实现上没有变化 但含义变了,现在两个结点之间有边是有方向的
6)遍历迭代器
实现没有变
构造下面的有向图测试一下:
广度优先遍历为:
0 2 3 5 7 9 8
深度优先遍历为:
0 3 9 7 8 2 5
整个图的广度优先遍历为:
0 2 3 5 7 9 8 1 4 6
整个图的深度优先遍历为:
0 3 9 7 8 2 5 1 4 6
可以发现,有向图的遍历,当顶点之间不可到达时,遍历不到,就像无向图中不在一个连通域一样