牛客 老子的全排列呢 (DFS)

老子的全排列呢

题目描述
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?
输入描述:

输出描述:
1~8的全排列,按照全排列的顺序输出,每行结尾无空格。

代码:

#include<bits/stdc++.h>
using namespace std;

bool used[9];//求八位数,从1到8,0不用
string ans;

void dfs(int digit)//层数从0到7,到8的时候就要输出了
{
    
    
	if (digit == 8)
	{
    
    
		cout << ans << endl;
		return;
	}
	for (int j = 1; j <= 8; j++)
	{
    
    
		if (!used[j])
		{
    
    
			used[j] = 1;
			ans.insert(ans.end(), j + '0');
			dfs(digit + 1);//DFS
			used[j] = 0;
			ans.erase(ans.end() - 1);
		}
	}
}

int main()
{
    
    
	dfs(0);
	return 0;
}

备注:

这种用递推来排列数的思想还可以用于其他的类似水仙花数的题。

猜你喜欢

转载自blog.csdn.net/qq_43700916/article/details/88364939