关于回溯模型的两种解空间树
来源:互联网 发布:pic单片机指令周期 编辑:程序博客网 时间:2024/06/06 04:34
#include <iostream>#include <sstream>#include <stdio.h>#include <algorithm>#include <string.h>#include <stack>#include <queue>#include <set>#include <math.h>/*=======================================回溯法的解空间树以排列为例1 2 3 4输出一共16种,采用两种解空间树========================================*/#define flush(arr, i) memset(arr, i, sizeof(arr))typedef long long int64;using namespace std;const int MAX_ITEM = 128;//const int oo = 0x7fffffff;const int oo = 0x3f3f3f3f;bool vis[MAX_ITEM];int item[] = {2, 4, 5, 9}, dp = 4, arr[MAX_ITEM];//关注当前这个元素选不选//入口参数表示深度void traverse_whether(int d){ if(d > dp) { for(int i = 1; i < d; i++) if(vis[i]) printf("%d ", item[i - 1]); printf("\n"); return; } vis[d] = 1, traverse_whether(d + 1); vis[d] = 0, traverse_whether(d + 1);}//关注于当前元素选什么//cnt表示当前要放的元素下标,d表示当前要选的元素下标void traverse_what(int d, int cnt){ if(d == dp + 1) { //删除最后一个,表示什么都不选 for(int i = 0; i < cnt - 1; i++) printf("%d ", arr[i]); printf("\n"); return; } for(int i = d; i <= dp; i++) { //选当前的 arr[cnt] = item[i]; cnt++; traverse_what(i + 1, cnt); cnt--; }}int main(){ flush(vis, 0); printf("着重于当前是否选\n"); traverse_whether(1); printf("==============================\n着重于当前选什么\n"); traverse_what(0, 0); printf("==============================\n"); return 0;}
0 0
- 关于回溯模型的两种解空间树
- 回溯法中解空间树的组织
- 关于回溯法的idea
- 关于回溯法的两道题
- 关于回溯剪枝算法的讨论
- LintCode 关于回溯算法的总结
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 关于感知学习模型机中空间任一点到超平面的距离公式的推导过程
- 获取当前的空间(模型空间or布局空间)
- 关于空间的理解
- 关于Rocchio算法和向量空间模型反馈
- 传统向量空间模型的缺陷
- 关于回溯法
- 关于递归和回溯
- 关于回溯算法
- 关于本空间的前置!
- 关于表空间的操作
- 让ImageView的图片全屏填充
- MySQL学习笔记17:别名
- Linux 用命令行打开doc pdf
- 5-15 计算圆周率
- linux下禁用IPV6的方法
- 关于回溯模型的两种解空间树
- 二维数组中查找
- 链表的简单学习
- 黑马程序员——高新技术--JDK1.5新特性(for循环增强、可变参数、静态导入、自动装拆箱、享元)
- MySQL学习笔记18:数学函数
- iOS中ASI
- C语言中全局变量、全局静态变量、局部变量、局部静态变量
- 5-16 求符合给定条件的整数集
- ConcurrentHashMap的实现