基础算法--递归(一)
来源:互联网 发布:windows修改网络命令 编辑:程序博客网 时间:2024/04/29 06:17
1.汉诺塔
#include <iostream>
using namespace std;
void fac(int n, char A, char B, char C)
{
if (n==1) cout<<"move "<<n<<": "<<A<<"-->"<<C<<endl;
else
{
fac(n-1,A,C,B);
cout<<"move "<<n<<": "<<A<<"-->"<<C<<endl;
fac(n-1,B,A,C);
}
}
int main()
{
int n;
cin>>n;
fac(n,'A','B','C');
return 0;
}
2.普通背包问题
设有一个背包可以放入的物品重量为S,现有n件物品,重量
分别是w1,w2,w3,…wn。问能否从这n件物品中选择若干件
放入背包中,使得放入的重量之和正好为S。如果有满足条件的
选择,则此背包有解,否则此背包问题无解。
#include <iostream>
using namespace std;
int knap(int s,int n,int w[])
{
if(s==0) return 1;
if(s<0||n<1) return 0;
if(knap(s-w[n-1],n-1,w)==1)
{
cout<<w[n-1]<<" "<<endl;
return 1;
}
return knap(s,n-1,w);
}
int main()
{
int s,n;
int w[5]={1,3,5,7,9};
s=20;
n=5;
int x=knap(s,n,w);
if(x==1)
cout<<"问题有解"<<endl;
else
cout<<"问题无解"<<endl;
return 0;
}
3. 0-1背包
#include <iostream>
using namespace std;
int timeval[110];
int val[110];
int MaxVal(int n, int s)
{
if(n<=0 || s<=0) return 0;
if( timeval[n]<=s && (MaxVal(n-1,s-timeval[n])+val[n])>MaxVal(n-1,s))
return MaxVal(n-1,s-timeval[n])+val[n];
return MaxVal(n-1,s);
}
int main()
{
int s,n,i;
cin>>s>>n;
for (i=1; i<=n; i++)
cin>>timeval[i]>>val[i];
cout<<MaxVal(n,s)<<endl;
return 0;
}
- 基础算法--递归(一)
- 基础算法--递归算法
- 基础算法--递归(二)
- Java 算法基础 -递归
- 基础算法:递归
- Java基础--递归算法
- 算法基础--递归
- 算法一--递归
- 算法之递归(一)
- 算法基础之递归算法
- [基础算法]递归二分算法
- Java基础--递归算法(递归结构)
- 基础算法之二:递归
- Java基础_递归算法
- 算法基础三 递归法
- 基础算法之简单递归
- 算法基础:递归---汉诺塔问题
- 算法基础:递归---Fibonacci数列
- 即时通信的简单实现
- WINCE声音驱动模型概述(1)
- arcgisserver尝试转载
- SQL注释优化
- WINCE声音驱动模型概述(2)--WINCE WAVE接口模型详解
- 基础算法--递归(一)
- 设计模式-Iterator模式戏说
- 提取视频帧,待深入研究的方法
- MyEclipse 7.5下安装反编译插件jad
- 算法--背包问题(3)
- RFC 2869
- WINCE声音驱动模型概述(3)--放音的消息解析
- 设计模式-Interpreter模式戏说
- linux wait函数解析