当前位置:网站首页>C# 数组之回溯法
C# 数组之回溯法
2022-08-03 05:23:00 【全局变量】
很多数排列组合问题都可以用回溯法来解决,回溯相比上面方法的优点就是减少可行解搜索的范围,因为回溯一旦发现当前解不满足条件就会停止搜索,回溯并进入下一个分支进行搜索,比上面的方法快很多,这里使用的是回溯法中的子集树模型。对于数组中任意一个元素,先将其放入结果集中,如果当前和不超出给定和,那就继续考察下一个元素,如果超出给定和,则舍弃当前元素。如此往复,直到找到所有可行解。
首先定义一个标志位数组flag[],flag[i]如果为true,则表示a[i]在当前解中,如果flag[i]为false则表示不在。这个数组元素个数与数组a的元素个数相同。(#add,当然此标识也可以与数组元素构成结构体,然后放入数组)
string outputStr = "";bool[] flag = new bool[100];
/// <summary>
/// 回溯法
/// </summary>
/// <param name="a">a: 待搜索的数组</param>
/// <param name="n">n: 数组元素个数</param>
/// <param name="t">t: 已经存储的元素个数</param>
/// <param name="sum">sum: 给定的和</param>
public void FixedSum(int[] a,int n,int t,int sum) {
if (sum == 0)
{
Output(a, t);
outputStr += "\r\n";//分割换行
}
else
{
if (t == n)
{
return;
}
else
{
flag[t] = true;
if (sum - a[t] >= 0)
FixedSum(a, n, t + 1, sum - a[t]);
//超出
flag[t] = false;
if (sum >= 0)
FixedSum(a, n, t + 1, sum);
}
}
}
/// <summary>
/// 输出这种组合
/// </summary>
/// <param name="a"></param>
/// <param name="n"></param>
public void Output(int[] a, int n)
{
for (int i = 0; i < n; i++)
{
if (flag[i])
outputStr += a[i] + ",";
}
}
int[] a = new int[20];
for (int i = 1; i <=20; i++)
{
a[i - 1] = i;
}
FixedSum(a, 20, 0, 10);
MessageBox.Show(outputStr);//弹出结果
边栏推荐
- 中国聚氯乙烯(PVC)土工膜发展动态及投资前景预测报告2022~2028年
- 软件测试 -- 入门 1 软件测试是什么?
- 【Arduino】关于“&”和“|” 运算-----多个参数运算结果异常的问题解决
- Ansible installation and deployment detailed process, basic operation of configuration inventory
- 中国人造金刚石行业投资战略规划及发展前景预测报告2022~2028年
- 中国磷化铟技术行业发展趋势与前景规划建议报告2022~2028年
- 中国融资租赁行业市场投资分析与前景战略规划建议报告2022~2028年
- 用iPhone前摄3D人像建模,Meta:我看行
- 【反弹shell与提权】
- 对页码的使用总结
猜你喜欢
随机推荐
中国水产养殖行业市场投资分析及未来风险预测报告2022~2028年
Oracle 日历表详解(含节假日)
【Arduino】关于“&”和“|” 运算-----多个参数运算结果异常的问题解决
MySQL 安装报错的解决方法
SAP HANA 新增一列时报错详解
【DC-4靶场渗透】
中国石油行业并购重组趋势与投资战略规划建议报告2022~2028年
pta a.1030的dijkstra+DFS方法
MySQL 唯一索引 UNIQUE KEY 会导致死锁?
vivado遇到的问题
7.16(6)
【解读合约审计】Harmony的跨链桥是如何被盗一亿美金的?
浅谈函数递归汉诺塔
3588. 排列与二进制
Sqli-labs-master靶场1-23关通关详细教程(基础篇)
漫谈Map Reduce 参数优化
速来围观,17个运维实用技巧
Try setting CHROME_EXECUTABLE to a Chrome executable
7.21[日常]
TypeError: Cannot read property ‘xxxx‘ of undefined的解决方法