图的分类:有权有向,有权无向,无权有向,无权无向;
图的描述方法:
- 邻接矩阵:用n*n的矩阵来描述点与点间的临界情况。有权图和无权图的区别是, A ( i , j ) A(i,j) A(i,j)>0表示i和j之间有一条边,而无权图中 A ( i , j ) A(i,j) A(i,j)只能取0,1。无向图和有向图的区别是,有向图中矩阵是对称矩阵,即 A ( i , j ) = 1 A(i,j)=1 A(i,j)=1则 A ( j , i ) A(j,i) A(j,i)也为1;而有向图中, A ( i , j ) = 1 A(i,j)=1 A(i,j)=1表示有一条从i到j的路径, A ( j , i ) A(j,i) A(j,i)不一定存在路径。
- 邻接链表:用邻接表为链表的数组来表示图。数组的每个元素都是一个链表,用来表示与数组对应顶点邻接的顶点。链表类型的成员为指向链表首字母的指针,链表中每个元素都有两个域,元素域用来储存值,指针域用来储存指向下个节点的指针。
- 邻接数组:用邻接表为数组线性表的数组来表示图。
图的遍历方法有两种:
- 广度优先算法:先把一个节点邻接的所有节点找到,再找与这些节点邻接的节点,一层一层的找。 类似于图的层次遍历。用队列可以很方便的实现。
- 深度优先算法:找到一个节点邻接的一个节点之后,再找与整个节点邻接的节点,一直找到没有子节点了为止,然后再回到最近的一个岔路口找,往另一个方向深处找。类似于图的前序遍历。用递归实现。