美文网首页
图的遍历

图的遍历

作者: 农民工__乔Young | 来源:发表于2017-11-08 21:35 被阅读0次
    结构
    //顶点结构
    typedef struct Vnode
    {
        Vertex data; //顶点信息
        ArcNode *firstarc; //指向第一条边
    } VNode;
    
    //边头结点结构
    typedef struct ANode
    {
        int adjvex; //该边的终点编号
        struct ANode *nextarc; //指向下一条边的指针
        InfoType info; //该边的权值等信息
    } ArcNode;
    
    //图结构
    typedef struct
    {
        VNode adjlist[MAXV]; //邻接表
        int n, e; //图中顶点数n和边数e
    } ALGraph;
    int Visited[MAXV] = {0};
    
    深度优先搜索
    
    void DFS(ALGraph *G,int v)
    {
        printf("%d", v);//访问该节点
        Visited[v] = 1;//标记该节点被访问
        ArcNode* p_EdgeNode = G->adjlist[v].firstarc;//v的第条一相邻边的边头节点
        while (p_EdgeNode != NULL)//v访问所有的相邻边
        {
            int w = p_EdgeNode->adjvex;//v相邻边的定点下标
            if (Visited[w] == 0)//w尚未本被访问,递归遍历以w起始部分
                DFS(G,w);
            p_EdgeNode = p_EdgeNode->nextarc;//指向顶点v的下一条边的边头节点
        }
    }
    
    广度优先搜索
    
    void BFS(ALGraph *G, int v)
    {
        ArcNode *p; int w, i;
        int queue[MAXV], front = 0, rear = 0; //定义循环队列
        int visited[MAXV];
        for (int i = 0; i < MAXV; i++)//初始化
            visited[i] = 0;
        //访问第一个节点
        printf("%d\n",v);
        visited[v] = 1;
        //v进队列
        rear = (rear + 1) % MAXV;
        queue[rear] = v;
        while (rear != front)//queue不空
        {
            //队头节点出队
            front = (front + 1) % MAXV;
            w = queue[front];
            ArcNode* p = G->adjlist[w].firstarc;//w的相邻节点
            while (p != NULL)//层序
            {
                if (visited[p->adjvex] == 0)//尚未访问
                {
                    //访问
                    printf("%d\n",p->adjvex);
                    visited[p->adjvex] = 1;
                    //入队
                    rear = (rear + 1) % MAXV; 
                    queue[rear] = p->adjvex;
                }
                p = p->nextarc; //找下一个邻接顶点
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:图的遍历

          本文链接:https://www.haomeiwen.com/subject/ozcumxtx.html