第五第六課------遞推+記憶話搜尋+搜尋八皇后(思想是做夢)+各種剪枝思想
阿新 • • 發佈:2018-12-13
搜尋是一個漫長的過程貫徹整個oi;
八皇后-------
#include <bits/stdc++.h>#define inf 0x7f
using namespace std;
int n,ans,a[inf],b[inf],c[inf],d[inf];
void print(){
++ans;
if(ans<=3){
for(int i=1;i<=n;i++) cout<<d[i]<<" ";
cout<<endl;
}
}
void s(int k){//行
for(int i=1;i<=n;i++){//列舉每一列
if(a[i]==0&&b[k-i+n]==0&&c[i+k]==0){
d[k]=i;
a[i]=1;
b[k-i+n]=1;
c[i+k]=1; if(i==n) print();
else s(k+1);
b[k-i+n]=0;
c[i+k]=0;
a[i]=0;
}
}
;
}
int main(){
cin>>n;
s(1);
cout<<ans;
return 0;
} 上述程式碼是有問題的,目前還未找出; 遞推講了基本的 卡特蘭數是 an=an-1+2(n-1),具體請見課件 第二類斯特林數 】n個有區別的球放到m個相同的盒子中,要求無一空 盒,其不同的方案數用S(n,m)表示,稱為第二類Stirling數。 S2(n,m)=mS2(n-1,m)+S2(n-1,m-1) (n>1,m1)要麼將n-1個球放進所有盒子裡其中最後一個球可以放進任意一個,另外一個就是隻把一個球放在盒子裡; 斐波拉契 f(n)=f(n-1)+f(n-1)//請參照兔子定理 最重要的是要自己根據前面與後面的關係(就是前面是怎麼從後面來的)