帮我修改避免查重 #include <iostream> #include <algorithm> using namespace std; int vis[9], a[9], record[9], n; void DFS(int cur) { if (cur == n) { for (int i = 0; i < n; i++) cout << record[i] << " "; cout << endl; return; } for (int i = 0; i < n; i++) { if (vis[i]) continue; vis[i] = true; record[cur] = a[i]; DFS(cur + 1); vis[i] = false; } } int main() { cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; sort(a, a + n); DFS(0); }
时间: 2024-02-14 18:11:35 浏览: 25
这段代码的主要问题在于没有考虑到输入的数字可能存在重复,因此会输出重复的排列。为了避免重复,可以在DFS的过程中添加一个判断,即如果当前数字和上一个数字相同且上一个数字还没有被使用过,就跳过当前数字的使用。修改后的代码如下:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
int vis[9], a[9], record[9], n;
void DFS(int cur) {
if (cur == n) {
for (int i = 0; i < n; i++)
cout << record[i] << " ";
cout << endl;
return;
}
for (int i = 0; i < n; i++) {
if (vis[i] || (i > 0 && a[i] == a[i-1] && !vis[i-1]))
continue;
vis[i] = true;
record[cur] = a[i];
DFS(cur + 1);
vis[i] = false;
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
DFS(0);
}
```
修改后的代码会输出不重复的排列。