树形结构的3种搜索方式示例分享

来源:互联网 发布:软件质量保证报告 编辑:程序博客网 时间:2024/06/05 23:59

树形结构在各项大赛中成为必备的知识之一,尤其是建立在树形结构基础上的搜索算法!

代码:

/**树的3种常见搜索方式1.二叉树方式(每一层只有0和1)2.满m叉树(每一层都有0 到m - 1)3.子集树,也称为全排列树*/#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>using namespace std;const int M = 20;int n, m;int ans[M];//二叉树void dfs_two(int cur){ if(cur == n){  for(int i = 0; i < n; i++){   cout << ans[i] << " ";  }  cout << endl;  return; } ans[cur] = 1; dfs_two(cur + 1); ans[cur] = 0; dfs_two(cur + 1);}//m叉树void dfs_m(int cur){ if(cur == n){  for(int i = 0; i < n; i++){   cout << ans[i] << " ";  }  cout << endl;  return ; } for(int i =0; i < n; i++){  ans[cur] = i;  dfs_m(cur + 1); }}bool vis[M];//子集树void dfs_sub(int cur){ if(cur == n){  for(int i = 0; i < n; i++){   cout << ans[i] << " ";  }  cout << endl;  return; } for(int i = 0; i < n; i++){  if(false == vis[i]){   vis[i] = true;   ans[cur] = i;   dfs_sub(cur + 1);   vis[i] = false;  } }}int main(){ n = 5; memset(ans, -1, sizeof(ans)); memset(vis, false, sizeof(vis)); dfs_two(0);//二叉树搜索 dfs_m(0);//满m叉树搜索 dfs_sub(0);//子集树搜索 return 0;}


原创粉丝点击