作业介绍
回溯算法
//vector 动态数组
//int arr[10] 数组
vector<int> arr;
//增
arr.push_back(1);
//删
arr.pop_back();
//改
arr[1] = 3;
//查
arr[2];
//元素个数
arr.size()
递归:
#1.返回值+参数
#2.结束条件
#3.递归式
#回溯算法: 1.本质就是递归 2.搜索:穷举算法() 3.场景: 1.组合 n=1234 k=2 12 13 14.... 2.切割问题: s="XXXXX" 特定条件 3.排列 4.棋盘:N皇后
模版:
void backtracking(参数){
if(结束条件){
存储数据
return ;
}
for(遍历剩余节点){
处理节点
backtracking(参数)
回溯撤销结果
}
}
void backtracking(int n,int k,int start){
if(temp.size() ==k){
ans.push_back(temp);
return ;
}
for(int i = start ;i<=n;i++){
temp.push_back(i);
backtracking(n,k,i+1);
temp.pop_back();
}
}
freopen("A.in",stdin);
freopen("A.out",stdout);
第二题
void backtracking(int tarsum,int k,int start,sum){
if(temp.size() ==k){
if(sum==tarsum)ans.push_back(temp);
return ;
}
for(int i = start ;i<=9;i++){
sum+=i;
temp.push_back(i);
backtracking(n,k,i+1,sum);
sum-=i;
temp.pop_back();
}
}
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 3
- 开始时间
- 2025-5-16 0:00
- 截止时间
- 2299-5-31 23:59
- 可延期
- 24 小时