• 深搜和宽搜的c++实现


          以前准备保研笔试的时候曾经练习过c语言实现这两种搜索,但是过去一段时间之后,遇到深搜和宽搜的实现,还是显得很是捉急啊!最近开始学习c++,发现c++实现下

    的深搜和宽搜简明易懂啊!

         简单一句话!深搜用堆栈,宽搜用队列。这篇文章主要倾向于实现而不是这两种搜索的应用了。

         下面有两段代码,是从维基百科上找到的,个人感觉非常有可重用性。

         

    深搜
     1  std::stack<node*> visited, unvisited;
     2 node* current;
     3 
     4 unvisited.push(root); //先把树的根指针
     5  
     6  while(!unvisited.empty()) //只有UNVISITED不空
     7  
     8  {
     9     current=(unvisited.top()); //当前应该访问的
    10     unvisited.pop(); 
    11  
    12     if(current->right!=NULL) 
    13     unvisited.push(current->right); // 把右边压入 因为右边的访问次序是在左边之后
    14  
    15     if(current->left!=NULL) 
    16     unvisited.push(current->left);
    17  
    18     visited.push(current);
    19  
    20     cout<<current->self<<endl;
    21    //这里是对current节点的操作,这里简单的为输出节点值
    22  }
    宽搜
     1 std::queue<node*> visited, unvisited; 
     2  node nodes[9];
     3  node* current;
     4  
     5  unvisited.push(&nodes[0]); //先把root放入unvisited queue
     6  
     7  while(!unvisited.empty()) //只有unvisited不空
     8  {
     9     current = (unvisited.front()); //目前應該檢驗的
    10  
    11     if(current -> left != NULL)
    12        unvisited.push(current -> left); //把左邊放入queue中
    13  
    14     if(current -> right != NULL) //右边压入。因为QUEUE是一个先进先出的结构,所以即使后面再压其他东西,依然会先访问这个。
    15        unvisited.push(current -> right);
    16  
    17     visited.push(current);
    18  
    19     cout << current -> self << endl;
    20  
    21     unvisited.pop();
    22  }
  • 相关阅读:
    浅析Json底层
    浅析servlet
    xml树结构
    JS中BOM和DOM之间的关系
    Test openLiveWriter
    JAVA静态代理动态代理详解
    java多态实现示例
    java类中的变量以及方法的执行顺序
    java值传递
    将javaweb项目部署到服务器中
  • 原文地址:https://www.cnblogs.com/ITEagle/p/2721957.html
Copyright © 2020-2023  润新知