AcWing 94. 递归实现排列型枚举

题目链接:点击这里

在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<map>
#include<set>

using namespace std;
typedef long long ll;
const int MOD = 10000007;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const int maxn = 1010;
int n;
vector<int> path;

void dfs(int idx, int state)	//idx枚举"坑",state记录对于当前"坑"该数是选了还是没选 
{
	if(idx==n)
	{
		for(auto it : path)
				printf("%d ", it);
		printf("\n");
		return;
	}
	
	for(int i = 0; i < n; ++i)
	{
		if(!(state >> i & 1))		//state的第i位为0 
		{
			path.push_back(i+1);		//选i 
			dfs(idx + 1, state|1<<i);	//state的第i位置成1
			path.pop_back();			//恢复现场 
		}
	}
}

int main()
{
	scanf("%d", &n);
	dfs(0, 0);	
	return 0;
}
发布了727 篇原创文章 · 获赞 111 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104239770