这道题刚开始以为要用栈,之后发现其实用递归的思想也是可以模拟出来。
思路:对每一辆车来说进去之后无非是出去或者再等等。这里我就用递归当中的act来代表这辆车的想法。把每一种情况都暴力模拟出来。
直接在代码当中解释吧。
#include <iostream>
using namespace std;
int num=0; // 可行情况的数目
void vis(bool act,int n,int k){ //act:true为进去,false为出来 n代表当前已经经历过进栈的车的数量 k代表经历过出栈车的数量
if(n>16) return ; //进栈不可以超过16
if(k==16) { //出栈了16次代表其中的一种情况
num++;
return ;
}
vis(true,n+1,k); //这里代表再进一辆
if(k<n) vis(false,n,k+1); //这里代表再出一辆 k<n是因为不能出大于进
return ;
}
int main(){
vis(true,1,0); //当然是从第一辆进来开始啦
cout<<num<<endl;
}