DFS
和 递归实现排列类型枚举 差不多,稍微改下代码就行
C++ 代码
#include <iostream>
using namespace std;
int n, vis[10], ret[10];
void dfs(int idx){
if(idx == n + 1) {
for(int i = 1; i <= n; ++ i)
printf("%d ", ret[i]);
cout << endl;
return ;
}
for(int i = 1; i <= n; ++ i)
if(vis[i] > 0){
ret[idx] = i;
-- vis[i];
dfs(idx + 1);
++ vis[i];
//ret[idx] = 0;
}
}
int main()
{
cin >> n;
for(int i = 1; i <= n; ++ i){
int a;
cin >> a;
++ vis[a];
}
dfs(1);
return 0;
}