全排列结构范例_超实用

#include
using namespace std;

int n, a[110];

void f(int x) { // 不仅作为一个参数,代表了当前的递归层数 
	if (x > n) { // x的值超过n的时候,说明已经递归了n次了,已经有n个循环了 
		// 如何判断方案合法性,以及如何输出 
		for (int i=1;i<=n;i++) printf("%d ",a[i]);
		printf("\n"); 
		// 判断,a[1]~a[n]中没有相同数字,符合的话,才输出 
		return;
	}
	for (int i=1;i<=n;i++) {
		// 如何将不同递归层数当中的枚举出来的数存下来 (设定全局变量) 
		a[x] = i; // 记录,第x层递归枚举出来的数是i 
		f(x+1);
	}
} // n个1~n的循环在嵌套 
 
int main() {
	scanf("%d",&n);
	// n个循环嵌套,每个循环是1~n,最终删去相同元素方案 
	f(1);
	
	
/*	 
	for (int i=1;i<=3;i++) {
		for (int j=1;j<=3;j++) {
			for (int k=1;k<=3;k++) {
				//如果存在相同数字,continue
				if (i==j || j==k || i==k) continue; 
				printf("%d %d %d\n",i,j,k);
			}
		}
	} // 暴力填数思想 + 筛选答案思想、
*/ 
	return 0;
}

你可能感兴趣的:(华迈初二-搜索与回溯,算法,c++)