图的介绍:前面我们已经学习树和二叉树,它们都是经典的数据结构类型,,今天我们要介绍一种新的数据结构——图。比较官方的定义是,图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。简单来说呢,图就是由一些小圆圈和连接这些圆圈的直线组成。它分为有向图和无向图两种。如右图所示:
深度优先搜索属于经典的图算法,英文缩写为DFS即Depth First Search。它的核心思想是:对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
基本思路:
(1)从图中某顶点v出发,访问顶点v
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过。
void dfs(int u)//递归实现深度优先遍历
{
L_NODE*t;
visit[u]=1;//表示已经被访问过
printf("%d ",u);//输出
count++;//记录被访问过的顶点个数
t=head[u];//找到和u邻接的顶点的链表的头指针
while(t!=NULL)
{
if(visit[t->ver]==0)//相邻结点未被访问过,则以这个结点出发进行深度优先遍历
dfs(t->ver);
t=t->link;//访问下一个与u相邻的结点
}
}