zoukankan      html  css  js  c++  java
  • 广度优先(BFS) ------- 模板1:-----模板2:--------模板3:

    //使用数组queue[ ]存放结点队列
    void   BFS( ) 
    {   head=0; tail=1;  queue[head]=首结点的值;
         while (head<tail) //队列不空
         {    temp=tail;
              for (k=head; k<=tail; k++)  //对当前层扩展
              {      if  ( 到达目的状态 )    {      输出结果;   return;   }
                     for (i=1; i<=m; i++) //每个结点的m种扩展可能
                          if (可以扩展) 
                          {      处理每种可能情况; 
                                  queue[temp++]=扩展出的结点值;
                          } 
             }
             head=tail;   tail=temp;
    }
    View Code

    //使用数组queue[ ]存放结点队列
    void   BFS( )
    {   head=0; tail=1;  queue[head]=首结点的值;
         while (head<tail) //队列不空
         {    temp=tail;
              for (k=head; k<=tail; k++)  //对当前层扩展
              {      if  ( 到达目的状态 )    {      输出结果;   return;   }
                     for (i=1; i<=m; i++) //每个结点的m种扩展可能
                          if (可以扩展)
                          {      处理每种可能情况;
                                  queue[temp++]=扩展出的结点值;
                          }
             }
             head=tail;   tail=temp;
    }

    //使用数组queue[ ]存放结点队列
    void   BFS( ) 
    {    head=0; tail=1;  
         queue[head]=首结点的值;
         while (head<tail)   //队列不空
         {     if  ( 到达目的状态 )    {      输出结果;   break;   }
                head++;
               for (i=1; i<=m; i++) //结点head的m种扩展可能
                          if (可以扩展) 
                          {      处理每种可能情况; 
                                  queue[tail++]=扩展出的结点值;
                          } 
             }
    }
    View Code

    //使用数组queue[ ]存放结点队列
    void   BFS( )
    {    head=0; tail=1; 
         queue[head]=首结点的值;
         while (head<tail)   //队列不空
         {     if  ( 到达目的状态 )    {      输出结果;   break;   }
                head++;
               for (i=1; i<=m; i++) //结点head的m种扩展可能
                          if (可以扩展)
                          {      处理每种可能情况;
                                  queue[tail++]=扩展出的结点值;
                          }
             }
    }

    //使用STL中的队列
    void   BFS( ) 
    {   首结点入队列Q;
         while ( ! Q.empty() ) //队列不空
         {    temp=Q.front();    
              if  ( 到达目的状态 )     {      输出结果;   break;   } 
              Q.pop( );  
              for (i=1; i<=m; i++) //扩展结点temp的m种可能
                      if (可以扩展) 
                      {      处理每种可能情况; 
                             扩展出结点入队列;
                      } 
             }
    }
    View Code

    //使用STL中的队列
    void   BFS( )
    {   首结点入队列Q;
         while ( ! Q.empty() ) //队列不空
         {    temp=Q.front();   
              if  ( 到达目的状态 )     {      输出结果;   break;   }
              Q.pop( ); 
              for (i=1; i<=m; i++) //扩展结点temp的m种可能
                      if (可以扩展)
                      {      处理每种可能情况;
                             扩展出结点入队列;
                      }
             }
    }

  • 相关阅读:
    HDU 4278 Faulty Odometer 8进制转10进制
    hdu 4740 The Donkey of Gui Zhou bfs
    hdu 4739 Zhuge Liang's Mines 随机化
    hdu 4738 Caocao's Bridges tarjan
    Codeforces Gym 100187M M. Heaviside Function two pointer
    codeforces Gym 100187L L. Ministry of Truth 水题
    Codeforces Gym 100187K K. Perpetuum Mobile 构造
    codeforces Gym 100187J J. Deck Shuffling dfs
    codeforces Gym 100187H H. Mysterious Photos 水题
    windows服务名称不是单个单词的如何启动?
  • 原文地址:https://www.cnblogs.com/2014acm/p/3888869.html
Copyright © 2011-2022 走看看