#include <stdio.h> #define MAXN 100

int n, m; // n个整数中取m个元素 int a[MAXN]; // 存放每个元素 int vis[MAXN]; // 记录每个元素是否被使用过

void dfs(int step) { if (step == m) { // 已经选出m个元素,输出结果 for (int i = 0; i < m; i++) { printf("%d ", a[i]); } printf("\n"); return; } for (int i = 1; i <= n; i++) { // 枚举每个元素 if (!vis[i]) { // 如果该元素未被使用过,即可选择 vis[i] = 1; // 标记该元素已被使用 a[step] = i; // 将该元素加入排列中 dfs(step + 1); // 递归下一步 vis[i] = 0; // 回溯,将该元素还原 } } }

int main() { scanf("%d%d", &n, &m); dfs(0); // 从第0步开始 return 0; }

采用递归回溯法设计一个算法求从 1~n的 个整数中取出 m 个元素的排列要求每个元素最多只能取一次。例如m=3、m=2 的输出结果是1213、2123、3132 结果不能有重复用c语言写

原文地址: https://www.cveoy.top/t/topic/bTos 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录