广西注册公司网站,wordpress 仿主题,东营房产网,网站宣传流程刚接触算法#xff0c;有没有被递归又循环的dfs吓到#xff1f;没关系#xff0c;几个例题就可以彻底掌握#xff01; 1.全排列 1-n的全排列,如输入3#xff0c;按顺序对1-3进行排列 //枚举
#includeiostream
#includealgorithm
#includecstring… 刚接触算法有没有被递归又循环的dfs吓到没关系几个例题就可以彻底掌握 1.全排列 1-n的全排列,如输入3按顺序对1-3进行排列 //枚举
#includeiostream
#includealgorithm
#includecstring
using namespace std;
const int N10;
int n;
bool st[N];//true选过 false是没选过
int arr[N];//存的是答案
void dfs(int x)
{if(xn){for(int i1;in;i){printf(%5d,arr[i]);//长宽5}printf(\n);return ;}for(int i1;in;i){if(!st[i]){st[i]true;arr[x]i;dfs(x1);st[i]false;arr[x]0;}}
}
int main()
{scanf(%d,n);dfs(1);return 0;
}
2.组合数
题目 答案
//选数
//剪枝
#includeiostream
#includealgorithm
#includecstring
using namespace std;
const int N30;
int k,n;
int q[N];
int arr[N];
int res0;bool is_prim(int sum)
{if(sum2)return false;for(int i2;isum/i;i){if(sum%i0)return false;}return true;
}
//求组合数x表示当前到了哪个位置
//start表示从几开始枚举
void dfs(int x,int start)
{if(((x-1)n-start1)k){return ;}if(xk){int sum0for(int i1;ik;i){sumarr[i];}if(is_prim(sum))//是素数1 {res;}}for(int istart;in;i){arr[x]q[i];dfs(x1,i1);//继续向下深度优先 arr[x]0;//恢复现场 }
}int main()
{scanf(%d %d,n,k);dfs(1,1);printf(%d\n,res);return 0;
}