深度优先遍历
思想:类似于二叉树的层次遍历,按优先级从高到低进行遍历
下面举一个例子,如下所示
刚开始的链式图从顶点0开始,然后0对应的3,2优先级最高,接下来是顶点3对应的(0,1),接下来是顶点2对应的(0,1,3),注意,已经遍历过的结点我们做好标志,接下来就不再遍历它,最后我们得到结点的排序(0,3,2,1)
相关代码
//类似于层次遍历
//将该个结点对应行的数据存入有前后指针的一个数组中,接下来依次按照结点顺序进行遍历,按此规则直到所有的结点都被遍历完全。
int visit[max];//标志结点是否经过访问
int story[max];//按优先级先后存储结点
void all(ag a,int v)
{
int fre=0,end=0;//分别指向story[max]的末端位置,以及将要访问的结点位置。
story[fre]=v;
while(pre<=end)
{
v=story[end++];
*p=a.first[v];
while(p!=null)
{
if(visit[p->r]==0)
{
story[++fre]=p->r;
visit(p->r);
visit[p->r]=1;
}
p=p->next;
}
}
}