问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳3级。求该青蛙跳上一个n级的台阶总共有多少种跳法,并且打印所有跳跃路径。
- /**
- * 跳台阶
- * @param hasJumped 已经跳过的台阶路径
- * @param currentStair 当前所在的台阶编号
- * @param jumpStep 跳跃的台阶数
- * @param maxStep 青蛙能跳的最大台阶数
- * @param stairNum 台阶总数
- */
#include<vector>
#include<string>using namespace std;
vector<vector<int>> res;
vector<int> path;
/************************************************
* Declaration: All Rigths Reserved !!!
***********************************************/
vector<vector<int>> jumpstair(vector<int> hasjump,int curr,int maxstep,int total)
{
if(curr>total)
return res;
if(curr==total)
{
for(int i=0;i<total;i++)
{
if(hasjump[i]>0)
path.push_back(hasjump[i]);
}
res.push_back(path);
path.clear();
return res;
}
if(curr<total)
{
for(int j=maxstep;j>=1;j--)
{
int newcurr=curr+j;
//if(newcurr<=total)
hasjump[curr]=newcurr;
// for(int k=curr+1;k<curr+j;k++)//
// hasjump[k]=0;
jumpstair(hasjump,newcurr,maxstep,total);
}
return res;
}
}
int main()
{
int total=7;
int maxstep=2;
// int hasjump[5]={0};
vector<int> hasjump(total);
jumpstair(hasjump,0,maxstep,total);
cout<<" res"<<res.size()<<endl;
for(int i=0;i<res.size();i++)
{
{
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<vector<int>> res;
vector<int> path;
/************************************************
*
*
* Date: 2017-2-17
* Declaration: All Rigths Reserved !!!
***********************************************/
vector<vector<int>> jumpstair(vector<int> &hasjump,int curr,int maxstep,int total)///必须要引用参数!
{
if(curr>total)
return res;
if(curr==total)
{
for(int i=0;i<total+1;i++)
{
if(hasjump[i]>0)
path.push_back(i);
}
res.push_back(path);
path.clear();
hasjump[curr]=0;
return res;
}
if(curr<total)
{
for(int j=1;j<=maxstep;j++)///从1加到3;;;
{
hasjump[curr]=1;
int newcurr=curr+j;
if(newcurr<=total)
hasjump[newcurr]=1;
// for(int k=curr+1;k<curr+j;k++)//
// hasjump[k]=0;
jumpstair(hasjump,newcurr,maxstep,total);
hasjump[curr]=0;
}
return res;
}
}
int main()
{
int total=5;
int maxstep=2;
// int hasjump[5]={0};
vector<int> hasjump(total+1);
jumpstair(hasjump,0,maxstep,total);
cout<<" res"<<res.size()<<endl;
for(int i=0;i<res.size();i++)
{
{
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}