zoukankan      html  css  js  c++  java
  • 广度优先遍历算法

    广度优先遍历,这边就要涉及队列的处理,因为,我们一开始访问一个节点之后,访问跟这个结点直接相连的所有节点,这样相连的节点依次加入队列当中,保持队列的先进先出,每次出一个,再访问出的这个节点直接相连的节点,仍然依次进入队列当中。

    这边我们知道队列的最大元素的个数,这边采用循环队列的结构。

    typedef struct
    {
        int data[MAXSIZE];
        int front;
        int rear;
    }Queue;

    给出队列的入队,出队操作。

    int enQueue(Queue *q,int e)
    {
        if((q->rear+1)%MAXSIZE==q->front)
        {
            return 0;
        }
        q->data[q->rear]=e;
        q->rear=(q->rear+1)%MAXSIZE;
        return 1;
    }

    int deQueue(Queue *q,int *e)
    {
        if(q->front==q->rear)
            return 0;
        *e=q->data[q->front];
        q->front=(q->front+1)%MAXSIZE;
        return 1;
    }

    给出整个代码:

    #include <stdio.h>
    
    #define MAXVEX 9
    #define INFINITY 65535
    #define MAXSIZE 9 //队列最大储存
    
    typedef struct MGraph
    {
        char vexs[MAXVEX];
        int arc[MAXVEX][MAXVEX];
        int numVertexes, numEdges;
    }MGraph;
    
    typedef struct
    {
        int data[MAXSIZE];
        int front;
        int rear;
    }Queue;
    
    int visited[MAXVEX];
    
    int initQueue(Queue *q);
    int queueEmpty(Queue q);
    int enQueue(Queue *q,int e);
    int deQueue(Queue *q,int *e);
    void createMGraph(MGraph *g);
    void BFSTraverse(MGraph g);
    
    
    int initQueue(Queue *q)
    {
        q->front=0;
        q->rear=0;
        return 1;
    }
    
    int queueEmpty(Queue q)
    {
        if(q.front==q.rear)
            return 1;
        else
            return 0;
    }
    
    int enQueue(Queue *q,int e)
    {
        if((q->rear+1)%MAXSIZE==q->front)
        {
            return 0;
        }
        q->data[q->rear]=e;
        q->rear=(q->rear+1)%MAXSIZE;
        return 1;
    }
    
    int deQueue(Queue *q,int *e)
    {
        if(q->front==q->rear)
            return 0;
        *e=q->data[q->front];
        q->front=(q->front+1)%MAXSIZE;
        return 1;
    }
    
    void createMGraph(MGraph *g)
    {
        int i, j;
    
        g->numEdges=15;
        g->numVertexes=9;
    
        g->vexs[0]='A';
        g->vexs[1]='B';
        g->vexs[2]='C';
        g->vexs[3]='D';
        g->vexs[4]='E';
        g->vexs[5]='F';
        g->vexs[6]='G';
        g->vexs[7]='H';
        g->vexs[8]='I';
    
    
        for (i = 0; i < g->numVertexes; i++)
        {
            for ( j = 0; j < g->numVertexes; j++)
            {
                g->arc[i][j]=0;
            }
        }
    
        g->arc[0][1]=1;
        g->arc[0][5]=1;
    
        g->arc[1][2]=1;
        g->arc[1][8]=1;
        g->arc[1][6]=1;
    
        g->arc[2][3]=1;
        g->arc[2][8]=1;
    
        g->arc[3][4]=1;
        g->arc[3][7]=1;
        g->arc[3][6]=1;
        g->arc[3][8]=1;
    
        g->arc[4][5]=1;
        g->arc[4][7]=1;
    
        g->arc[5][6]=1;
    
        g->arc[6][7]=1;
    
    
        for(i = 0; i < g->numVertexes; i++)
        {
            for(j = i; j < g->numVertexes; j++)
            {
                g->arc[j][i] =g->arc[i][j];
            }
        }
    
    }
    
    void BFSTraverse(MGraph g)
    {
        int i,j;
        Queue q;
        for(i=0;i<g.numVertexes;i++)
            visited[i] = 0;
        initQueue(&q);
        for(i=0;i<g.numVertexes;i++)
        {
            if(visited[i]!=1)
            {
                visited[i]=1;
                printf("%c ",g.vexs[i]);
                enQueue(&q,i);
                while(!queueEmpty(q))
                {
                    deQueue(&q,&i);
                    for(j=0;j<g.numVertexes;j++)
                    {
                        if(g.arc[i][j]==1&& visited[j]!=1)
                        {
                            visited[j]=1;
                            printf("%c ",g.vexs[j]);
                            enQueue(&q,j);
                        }
                    }
                }
            }
        }
    }
    
    int main()
    {
        MGraph g;
        createMGraph(&g);
        BFSTraverse(g);
        return 0;
    }
  • 相关阅读:
    2.3、css颜色表示法
    2.2、css文本设置
    2.1、css基本语法及页面引用
    1.10、html内嵌框架
    1.9、html表单
    1.8、html表格
    1.7、html列表
    1.6、html链接
    1.5、html图像、绝对路径和相对路径
    1.4、html块、含样式的标签
  • 原文地址:https://www.cnblogs.com/fengbing/p/3580748.html
Copyright © 2011-2022 走看看