zoukankan      html  css  js  c++  java
  • 图的深度优先搜索/广度优先搜索(邻接表实现)

    //深度优先遍历图返回连通分量数-
    int dfstraverse(LinkedGraph q)
    {
        int i,count=0;
        for(i=0;i<q.n;i++)
            visitnode[i]=0;
        for(i=0;i<q.n;i++)
            if(!visitnode[i])
            {
                printf("#DFS->CASE[%d]:
    ",count);
                count++;
                dfs(q,i);
            }
        return count;
    }
    void DFS(LinkedGraph q)
    {
        int i,j;
        for(i=0;i<q.n;i++)
        {
            for(j=0;j<q.n;j++)
                visitnode[j]=0;
            printf("
    ");
            dfs(q,i);
        }
    }
    void bfs(LinkedGraph g,int i)
    {
        int j;
        EdgeNode *p;
        int queue[M],front=0,rear=0;
        printf("%c
    ",g.adjlist[i].vartex);
        visitnode[i]=1;
        queue[rear++]=i;//输出被访问节点,并将其入队
        while(front<rear)//当队不空
        {
            j=queue[front++];//出队
            p=g.adjlist[j].FirstEdge;//定为到该节点的第一条边
            while(p)
            {
                if(visitnode[p->adjvex]==0)//如果该条边的顶点未访问
                {
                    printf("%c
    ",g.adjlist[p->adjvex].vartex);//输出该边的顶点
                    queue[rear++]=p->adjvex;//把这条边的顶点入队
                    visitnode[p->adjvex]=1;//标记访问过该顶点
                }
                p=p->next;//访问下一条边
            }
        }
    }
    //广度优先遍历图返回连通分量数
    int bfstraverse(LinkedGraph g)
    {
        int i,count=0;
        for(i=0;i<g.n;i++)
            visitnode[i]=0;
        for(i=0;i<g.n;i++)
            if(!visitnode[i])
        {
            printf("#BFS->CASE[%d]:
    ",count);
            count++;
            bfs(g,i);
        }
        return count;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    980不同路径III
    输入函数
    IDEA更新maven依赖包
    join()函数
    方差偏差困境
    np.bincount()函数
    72编辑距离
    741摘樱桃
    523连续的子数组和
    1306跳跃游戏III
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768505.html
Copyright © 2011-2022 走看看