汉沽天津网站建设,wordpress最好用的编辑器,淘宝客网站搜索怎么做,静态网站提交表单怎么做全排列
问题描述#xff1a;将n个互不相同的数全排列#xff0c;即1#xff0c;2#xff0c;n 方法#xff1a;dfs
算法思路#xff1a;
dfs(从第一层开始){if(递归结束条件){遍历a[i]}打印换行for(循环n个位数) {if(当前数字没用过){第k层#xff08;第k个位置…全排列
问题描述将n个互不相同的数全排列即12······n 方法dfs
算法思路
dfs(从第一层开始){if(递归结束条件){遍历a[i]}打印换行for(循环n个位数) {if(当前数字没用过){第k层第k个位置填数字i标记置为1进入下一层标记重新置0}}
}代码
#includestdio.hint n,flag[100],a[100];
void dfs(int k){if(kn1){ //递归结束条件当到达第n1层代表第n层已经填完for(int i1;in;i){printf(%d ,a[i]);}printf(\n);}for(int i1;in;i){ //n个数字 if(flag[i]0){ //当前数字没用过才可以排列a[k]i; //第k层第k个位置填数字iflag[i]1; //该数已经用过置为1dfs(k1); //填下一层下一个位置flag[i]0; //递归回来的时候需要重新置为0 }}
}
int main()
{scanf(%d,n);dfs(1); //从第一层第一个位置开始排列 return 0;
}
n个数选m个数全排列
#includestdio.hint n,m,flag[100],a[100];
void dfs(int k){if(km1){ //递归结束条件当到达第n1层代表第n层已经填完for(int i1;im;i){printf(%d ,a[i]);}printf(\n);}for(int i1;in;i){ //n个数字if(flag[i]0){ //当前数字没用过才可以排列a[k]i; //第k层第k个位置填数字iflag[i]1; //该数已经用过置为1dfs(k1); //填下一层下一个位置flag[i]0; //递归回来的时候需要重新置为0}}
}
int main()
{scanf(%d %d,n,m);dfs(1); //从第一层第一个位置开始排列return 0;
}
n个不同的元素任取m个数进行组合。组合无序
#includestdio.hint n,m;
int a[1000];void dfs(int k){if(km1){ //递归结束条件当到达第m1层代表第m层已经填完for(int i1;im;i){printf(%d ,a[i]);}printf(\n);}//当前位置数值比前一个数至少大1a[k]代表当前位置上的值它的范围是[a[k-1]1,n]for(int ia[k-1]1;in;i){a[k]i; //第k层第k个位置填数字idfs(k1); //填下一层下一个位置}
}int main(){scanf(%d %d,n,m);dfs(1); //从第一层第一个位置开始排列return 0;
}
素数环
题目 素数环:把从 1 到 n 这 n 个数摆成一个环要求相邻两个数的和是一个素数编 程求出所有解法。
#includestdio.h
#includemath.hint n6;
int flag[100],a[100];
int exist 0;int prime(int n){for(int i2;isqrt(n);i){if(n%i0){return 0;}}return 1;
}void dfs(int k){if(kn1 prime(a[1]a[k])){for(int j1;jn;j){printf(%d,a[j]);exist 1;}printf(\n);}else{for(int i1;in;i){if(flag[i]0 (k1 || prime(ia[k-1]))){a[k]i;flag[i]1;dfs(k1);flag[i]0;}}}
}int main(){dfs(1);if(flag 0)printf(无解);return 0;
}以上属个人见解。 ❤️希望对您有帮助您的支持是我创作最大的动力