用哈希表去重会超时,改用bool数组重拳出击
C++ 代码
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
int q[11];
int n;
vector<int> temp;
void dfs(int num,int a)
{
if(num==n)
{
for(auto i:temp)
cout<<q[i]<<' ';
cout<<endl;
return ;
}
bool m[10];
**//各位好哥哥,感觉每个递归新建一个bool数组,太朴素了,有没有华丽的全局变量的方法?**
for(int i=0;i<n;i++)
{
if(!(a>>i&1))
{
if(!m[q[i+1]])
{ temp.push_back(i+1);
dfs(num+1,a|(1<<i));
temp.pop_back();
m[q[i+1]]=true;
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>q[i];
sort(q,q+n+1);
;
dfs(0,0);
return 0;
}