1 全排列

  1. 取消同步流,严禁混用cincout和printg
  2. 对于数组printf(“%5d”,ve[i])
  3. 注意记得判断size大小 if (x == n + 1&&ve.size()==n) 不然可能输出无效解
  4. ve.pop_back(); //pop_back不需要传入数
  5. 回溯之后无需dfs(x+1)因为每个位置都要有数字
点击查看代码
#include<bits/stdc++.h>
//因为有printf所以不能有定义ll
using namespace std;
int n;
const int maxn = 15;
int st[maxn];
vector<int> ve;

void dfs(int x)
{
	//注意记得判断size大小
	//传入数组或者v[i]时printf没有&
	if (x == n + 1&&ve.size()==n)
	{
		for (int i = 0;i < ve.size();i++)
		{
			printf("%5d", ve[i]);
		}
	
		cout << endl;

	}
	else if (x > n+1)
		return;
	else {
		for (int i = 1;i <= n;i++)
		{
			if (st[i] != 0)
				continue;
			else
			{
				st[i] = 1;
				ve.push_back(i);
				dfs(x + 1);
				st[i] = 0;
				ve.pop_back();
				//pop_back不需要传入数
				/*dfs(x + 1);*/

			}
}
	}
}


signed main()
{

	cin >> n;
	dfs(1);

}
posted on 2025-12-07 19:18  Hoshino1  阅读(1)  评论(0)    收藏  举报