#include<bits/stdc++.h>
using namespace std;
int n;
int ans[13];
int pc[15];
int already;
int sum;
int vis[11];
int dfs(int step,int temp){
if(temp>sum)return 0;
if(step==n){
if(temp==sum){
for(int i=0;i<n;i++)
{cout<<ans[i]<<" ";}
return 1;
}
else return 0;
}
for(int i=1;i<=n;i++){
if(vis[i])continue;
vis[i]=1;
ans[step]=i;
if(dfs(step+1,temp+i*pc[step]))//当找到的时候此时疯狂return 1 直接结束
return 1;
vis[i]=0;
}
return 0;//循环结束 并无找到 返回
}
int main(){
cin>>n;
cin>>sum;
pc[0]=pc[n-1]=1; //杨辉三角
if (n>1){
for (int i=1;i*2<n;i++)
pc[i]=pc[n-1-i]=(n-i)*pc[i-1]/i;
}
dfs(0,0);
system("pause");
return 0;
}
自闭->数字三角形
最新推荐文章于 2022-08-07 19:54:56 发布