Cho một tập hợp gồm n phần tử có giá trị từ 1 đến n. Yêu cầu xuất ra các hoán vị của tập hợp này theo thứ tự tăng dần.
Dữ liệu đầu vào: số nguyên dương n (n<10)
Dữ liệu đầu ra: gồm n! dòng ghi các hoán vị theo thứ tự tăng dần, mỗi phần tử của tập hợp ngăn cách nhau bởi khoảng trắng.
Ví dụ:
Input: 3
Output:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Code tham khảo
#include <iostream>
using namespace std;
int n, kq[11], dd[10];
void xuat()
{
for (int j=1; j<=n; j++)
cout<< kq[j]<<" ";
cout << endl;
}
void backtrack(int i)
{
if (i>n) xuat();
for (int j=1; j<=n; j++)
if (dd[j]==0)
{
dd[j]=1;
kq[i]=j;
backtrack(i+1);
dd[j]=0;
}
}
int main()
{
cin >> n;
for (int i=1; i<=9; i++)
dd[i]=0;
backtrack(1);
}
cho mình hỏi với dãy 0-0-0-5-3
liệt kê hoán vị của dãy 5 phần tử trên mà các hoán vị không trùng nhau như nào?
ví dụ: 0-0-0-3-5, 0-0-3-0-5. ..vv
#include
using namespace std;
int main(){
int n;cin >> n;
vector a(n);
for(int i = 0;i<n;i++){
a[i] = i +1;
continue;
}
do{
for(int &x : a){
cout << x << " " ;
}
cout << "\n";
}while(next_permutation(a.begin(),a.end()));
return 0;
}
mình thấy kiểu này nhanh hơn á bạn