Thủ tục đệ quy in ra tất cả các hoán vị của n phần tử của n phần tử một dãy số . a = {a1,a2,a3,....an}
//Thủ tục đệ quy in ra tất cả các hoán vị của n phần tử của n phần tử một dãy số . a = {a1,a2,a3,....an}
#include <iostream.h>
#include <conio.h>
int n,a[100],b[100],c[100];
void hv(int);
void xuat(void);
int main()
{
cout<<"CT hoan vi n so."<<endl;
cout<<"Nhap so phan tu n = ";cin>>n;
cout<<"Nhap các phan tu : "<<endl;
for ( int i = 1 ; i<=n; i++)
cin>>a[i];
hv(1);
getch();
return 0;
}
void hv(int j)
{
for ( int i = 1; i<=n; i++)
{
if ( b[i] == 0 )
{
c[j] = a[i];// a[] la mang dau vao, c[] la mang dau ra
b[i] = 1;
if ( j == n)
xuat();
else
hv(j+1);// Ham goi lai ham
b[i] = 0;
}
}
}
void xuat(void)
{
for (int i = 1; i<=n; i++)
{
cout<<c[i];
}
cout<<endl;
}
Code Khác !
#include <iostream.h>
#include <conio.h>
#define MAX 10
int a[MAX],n;
void dao(int *x, int *y)
{
int tg;
tg = *x;
*x = *y;
*y = tg;
}
void hoanvi(int k)
{
int j;
if (k==1)
{
cout<<"\n";
for (j=0;j<n;j++)
cout<<a[j]<<" ";
}
else
for (j=k-1;j>=0;j--)
{
dao(&a[k-1],&a[j]);
hoanvi(k-1);
dao(&a[j],&a[k-1]);
}
}
int main()
{
int i;
cout<<"Nhap so phan tu cua mang : ";
cin>>n;
for (i=0; i<n; i++)
a[i] = i+1;
cout<<"Cac hoan vi là :\n";
hoanvi(n);
getch();
}
0 Response to "Thủ tục đệ quy in ra tất cả các hoán vị của n phần tử của n phần tử một dãy số . a = {a1,a2,a3,....an}"
Đăng nhận xét