I_NEED_HELP!!!!!!!!!!!!!!!!!!!

Please,help me!

时间限制:1s 空间限制:250M

题目描述:

请你帮小圌编写一个程序,使用递归的方法,按从小到大的顺序输出 1~n 的全排列。

输入格式:

一行,一个数字 n(1≤n≤9) 。

输出格式:

按字典序从小到大的顺序输出 1∼n 的全排列,每行一个排列,同一行之间数字用一个空格隔开。

输入样例:

3

输出样例:

1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1


一下是我的代码

#include <iostream>
using namespace std;

bool a[11];//标记此数是否入选; 
int b[20];//存储入选数 

void dfs(const int &x,const int &n)
{
	if (x>n) 
	{
		//输出 
		for (int j=1;j<=n;j++) cout<<b[j]<<" ";
		cout<<endl;
		return;
	}
	for (int i=1;i<=n;i++)
	{
		if (a[i]==false) //可以选数 
		{	
			b[x]=i;//存储i 
			a[i]=true;//标记i 
			dfs(x+1,n); 
			a[i]=false;//取消标记 
		}
		
	}
}

int main()
{	
	int n;
	cin>>n;
	for (int i=1;i<=n;i++) a[i]==false;//初始化 
	
	dfs(1,n);
	 
	return 0;
}

有什么可以优化的地方吗,或者有什么更高效的算法吗

1 个赞

初始化 a[i] == false ?而且定义在主函数外的数组默认都是 0 ,你要卡常的话,把 endl 改成 '\n',然后 main() 开头加上 ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);

1 个赞

谢谢,过了

1 个赞

我试了一下,ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);不加也可以

1 个赞

但是加了这个肉眼感觉更快

1 个赞

必须scanf,printf要不然不好使

1 个赞

为什么啊,scanf printf 还不如一个关了同步流的 cin cout,再说 fread fwrite 比你那个快多了

2 个赞

我试了,关同步流不好使,88分TLE

1 个赞

1 个赞

1 个赞

我让你写的是空指针,不是 NULL,然后 endl 也要换掉。

2 个赞

这个时候就要在代码开头写 #pragma GCC optimize(3) 了/kx

2 个赞