广度优先搜索

来源:互联网 发布:文化套利分析软件 编辑:程序博客网 时间:2024/05/22 18:23

广度优先搜索就是一个点,把他所有的连接的点都走一遍,然后再从他所连接的点再递归出去

之前写那个深搜的时候写了一个递归和一个循环,但大体思路都差不多,这个也是,所以就写一个循环吧,好理解一点

伪代码:


int    flag = 0;  // 这个就是标记量,标记有多少个已经走过了,如果这个flag == 总共的点数,那么就代表程序输出结束了

对象  point         //每个点是一个对象,属性有连接的点的数组,一个int a变量标记是否已经走过,  0代表没走过,1代表走过



while(true)

{

       if(flag == 总共的点)

          {

               break;

          }

        if(p.a  == 0)

          {

              System.out.print(p);

               flag++;

               if(连接点的数组的指针没指向最后)

                 {

                      p.a  = 这个连接的点;

                      指针++;  

                  }

                else

                {

                     连接的数组变为之前的数组连接点的数组

                      p.a = 这个连接点;

                 }

          }

        else

         {

            p.a = 上一个点

          }

}


void BFS (Graph G,int v){

   //按广度优先非递归遍历连通图G

   cout<<v; visited[v] = true;       //访问第v个顶点

   InitQueue(Q);                //辅助队列Q初始化,置空        

   EnQueue(Q, v);              //v进队

   while(!QueueEmpty(Q)){     //队列非空

      DeQueue(Q, u);          //队头元素出队并置为u

      for(w =FirstAdjVex(G, u); w>=0; w =NextAdjVex(G, u, w))

      if(!visited[w]){                 //wu的尚未访问的邻接顶点

            cout<<w;visited[w] = true; EnQueue(Q, w); //w进队

         }//if

   }//while

}//BFS




0 0