zoukankan      html  css  js  c++  java
  • 宽度搜索和深度搜索

    知识点总结报告模板

    知识点:

    宽度搜索

    (原理)宽度搜索也是广度优先遍历

    广度优先遍历的过程是首先访问初始点v,接着访问顶点v的所有未被访问过的领接点v1,v2,...,vt,然后再按照v1,v2,...,vt的次序访问每一个顶点的所有未被访问过的领接点,依次类推,直到图中所有和初始点v有路径相通的顶点都被访问过为止。

    以领接表为存储结构,在用广度优先遍历图时需要使用一个队列,这里采用环形队列,以类似于二叉树的层次遍历方式来遍历图。算法如下(v是初始点):

    void BFS(AdjGraph *G,int v)

    {   int w,i;ArcNode *p;

      SqQueue *qu;         //定义环形队列指针

      InitQueue(qu);           //初始化队列

      int visited[MAXV];           //定义顶点访问标记数组

      for (i=0;i<G->n;i++) visited[i]=0;       //访问标记数组初始化

      printf(“%2d”,v);             //输出被访问顶点的编号

      visited[v]=1;                 //置已访问标记

      enQueue(qu,v);

      while(!=QueueEmpty(qu))             //队不空循环

      {   deQueue(qu,w);               //出队一个顶点w

          p=G->adjlist[w].firstarc;           //指向w的第一个领接点

         while(p!=NULL)               //查找w的所有领接点

        {   if (visited[p->adjvex]==0)         //若当前领接点未被访问

            {   printf(“%2d”,p->adjvex);       //访问该领接点

               visited[p->adjvex]=1;         //置已访问标记

               enQueue(qu,p->adjvex);       //该顶点进队

             }

            p=p->nextarc;         //找下一个领接点

        }

      }

      printf(“\n”);

    }

    深度搜索

    (原理)深度搜索又叫深度优先遍历

    深度优先遍历的过程是从图的某个初始点v出发,首先访问初始点v,然后选择一个与顶点v相邻且没被访问过的顶点w,以w为初始顶点,再从它出发进行深度优先遍历,直到图中与顶点v领接的所有顶点被访问过为止,这个遍历过程是递归过程。

    以领接表为存储结构的深度优先遍历算法如下(其中v是初始点,visited是一个全局数组,初始时所有元素均为0,表示所有顶点尚未被访问过):

    int visited[MAX={0};                          //全局数组

    void DFS(AdjGraph *G,int v)         //深度优先遍历算法

    {   ArcNode *p;

      visited[v]=1;               //置已访问标记

      printf(“%d”,v);             //输出被访问顶点的编号

      p=G->adjlist[v].firstarc;         //p指向顶点v的第一个领接点

      while(p!=NULL)

        {   if(visited[p->adjvex);       //若p->adjvex顶点未被访问,递归访问它

            DFS(G,p->adjvex);

          p=p->nextarc;             //p指向顶点v的下一个领接点

        }

    }

  • 相关阅读:
    常用资源
    printf打印颜色
    Vue开发中踩坑-Day3
    Vue开发踩坑-Day2
    Vue开发中的踩坑-day1
    Python中virtualenv的使用
    第十一章:Python高级编程-协程和异步IO
    第十章:Python高级编程-多线程、多进程和线程池编程
    第九章:Python高级编程-Python socket编程
    自定义Element父子不关联的穿梭树
  • 原文地址:https://www.cnblogs.com/li1997/p/8438522.html
Copyright © 2011-2022 走看看