博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
回溯法 解决问题
阅读量:5249 次
发布时间:2019-06-14

本文共 1195 字,大约阅读时间需要 3 分钟。

 回溯 利用的 是dfs  深度搜索  和树状图  结合 解决问题 

 回溯 的核心代码 模板

void traceback(int x){	if()	{		操作 		return;	}	else	{		for(i=下界;i
经典的 回溯  就是n 皇后问题 

今天 又学习了用回溯解决01 背包问题 以及用二进制碎片化解决 01代码

01背包 最优解问题 

/*01 背包 回溯解决算法   dfs 深度搜索  */ #include
#define n 3 int maxvalue=0;int c=30;int va[3]={45,25,25};int we[3]={16,15,15};int tempva=0,tempwe=0;void traceback(int x){ if(x==n) {// printf("%d\n",tempva);// if(tempva>maxvalue&&tempwe<=c)//在这里判断的话 所有的情况都遍历到 算法 不优化 if(tempva>maxvalue) { maxvalue=tempva;//更新 } return; } { traceback(x+1);//不放 if(tempwe+we[x]<=c)// 重量 小于背包总量 提前做个判断 如果加上 背包超出直接 下面的不进行搜索 { tempwe+=we[x]; tempva+=va[x]; traceback(x+1); tempwe-=we[x];//变化回来 tempva-=va[x]; } }}int main(){ traceback(0);// printf("%d\n",maxvalue); return 0;}

如果是运用 二进制碎片化代码进行的话   原理就是暴力解决 将所有的情况 用01  表示  

//  01 背包 暴力解决  01代码 型   #include
#include
int va[3]={45,25,25};int we[3]={16,15,15};int c=30;int maxvalue=0;int n=3;int main(){ int i,j,num; int tempva,tempwe,tempnum; for(num=0;num
maxvalue&&tempwe<=c)//如果 价值最大 并且 容量小于总 { maxvalue=tempva; } } printf("%d\n",maxvalue); return 0;}

转载于:https://www.cnblogs.com/sizaif/p/9078591.html

你可能感兴趣的文章
打印网页内容
查看>>
利用github pages创建简单的网站
查看>>
如何使用VMWare共享Win7中的文件夹,对应Linux中的哪个目录下面?
查看>>
CentOS命令行连接带密码的wifi
查看>>
GetFileSaveName多参数用法
查看>>
Windows下尝试PHP7提示丢失VCRUNTIME140.DLL的问题解决
查看>>
spring boot 接口返回值去掉为null的字段
查看>>
重载<<操作符
查看>>
PHP函数积累
查看>>
SIRO Challenge 状态压缩 + DP 未解
查看>>
【语文学习资料】议论文专题学案-复习向
查看>>
Linux中查看端口占用情况
查看>>
爱改名的小融(三部曲)
查看>>
Java web之servlet
查看>>
掌握4个有效的数据分析要点,切实解决用户痛点
查看>>
ListView和Adapter数据适配器的简单介绍
查看>>
一次ddos攻击
查看>>
junit4单元测试基础
查看>>
java string
查看>>
验证组件FluentValidation的使用示例
查看>>