26

严蔚敏视频 笔记26

深度优先搜索遍历图

从图中某个顶点v0出发,访问此顶点,然后依次从v0的各个未被访问的邻接点出发深度优先遍历图,直至图中所有和v0有路径相通的顶点都被访问到,此时若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止

void DFSTraverse(Graph G,Status (*Visit)(int v)) {
    int i;
    for(v=0;v<G.vexnum;++v)
        visited[v]=FALSE; //
访问标志数组初始化

    for(v=0;v<G.vexnum;++v)
        if(!visited[v]) DFS(G,v); //
对尚未访问的顶点调用DFS
}

void DFS(Graph G,int v) {
    visited[v]=TRUE; VisitFunc(v);
    for(w=FirstAdjVex(G,v);w!=0;w=NextAdjVex(G,v,w))
        if(!visited[w]) DFS(G,w); //
v的尚未访问的邻接顶点调用
DFS
}

深度优先生成树
回边

广度优先搜索遍历图

从图中某个顶点v0出发,并在访问此顶点之后依次访问v0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和v0有路径相通的顶点都被访问到,此时若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止

void BFSTraverse(Graph G,Status (*Visit)(int v)) {
    for(v=0;v<G.vexnum;++v)
        visited[v]=FALSE;
    InitQueue(Q); //
置空的辅助队列
Q
    for(v=0;v<G.vexnum;v++)
        if(!visited[v]) { // v
尚未访问

            EnQueue(Q,v); // v
人队列
            visited[v]=TRUE; Visit(u);
            while(!QueueEmpty(Q)) {
                DeQueue(Q,u); //
队头元素出队并置为u
                for(w=FirstAdjVex(G,v);w!=0;w=NextAdjVex(G,v,w))
                    if(!visited[w]) {
                        EnQueue(Q,w); // u
的尚未访问的邻接顶点入队列

                        visited[w]=True; Visit(w);
                    }
            }
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值