注册 登录
编程论坛 数据结构与算法

用邻接表实现图的深度优先搜索 望大家帮忙解释 最好能有注释 详细一点太感谢了

liuhanhuziha 发布于 2013-12-18 22:35, 506 次点击
void  dfs1(int i)
{ link *p;   visit(head[i]) ;  //输出访问顶点
   visted[i]=1;            //全局数组访问标记置为1表示已访问
   p=head[i].link;
   while (p!=NULL)  {  
        if  (!visited[p->adjvex])
            dfs1(p->adjvex);  p=p->next;
    }
}
我想了很长时间感觉理解的还是很混乱啊求大家帮忙
3 回复
#2
liuhanhuziha2013-12-18 22:37
#3
liuhanhuziha2013-12-18 23:45
帮帮我吧
#4
菜鸟学习篇2013-12-19 22:08
首先你要知道深度优先搜索的提前 要有一个邻接链表也就是你这里所指的*P。
visted[i] 如果为1表示已经访问,在某些书里成为灰色,如果为0表示白色,也就是未访问。
 p=head[i].link; 表示邻接链表的某一个顶点。
while (p!=NULL)    如果当前某个顶点不为空,也就是他有边,有邻接点。
if  (!visited[p->adjvex])     如果该邻接点还未标记,则以该点为起点继续开始下一轮的搜索。
p=p->next;           顶点的下一条边

我觉得这个代码是不全的 其中我们还要有时间戳,用两次时间戳来寻找 发现时间和完成时间,以便寻找对短边。
推荐你看 算法导论22章 基本的图算法  写的相当明白
1