BCPERMU PTIT spoj – Liệt kê hoán vị (Cơ bản)

Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCPERMU/

1. Đề bài Liệt kê hoán vị

Liệt kê hoán vị của n phần tử của một tập gồm các số từ 1->n.

Input

Dòng duy nhất chứa số n (1<=n<=8)

Output

Các hoán vị sắp xếp theo thứ tự từ điển tăng dần.

Example

Input:
3

Output:
123
132
213
231
312
321

 

2. Code Liệt kê hoán vị pascal c++

a. code pascal BCPERMU

const
        nmax=8;
type
        data = byte;
var
        n:data;
        dd:array[1..nmax] of boolean;
        res:array[1..nmax]of data;
procedure xuat;
var     i:data;
begin
        for i:=1 to n do
                write(res[i]);
        writeln;
end;

procedure try(i:data);
var     j:data;
begin
        if i>n then
                xuat
        else
                for j:=1 to n do
                        if not dd[j] then
                                begin
                                        dd[j]:=true;
                                        res[i]:=j;
                                        try(i+1);
                                        dd[j]:=false;
                                end;
end;


begin
        readln(n);
        fillchar(dd,sizeof(dd),false);
        try(1);
end.

b. code c++ BCPERMU

#include <stdio.h>
using namespace std;
#define nmax=8;

int n;
bool dd[10];
int res[10];

void xuat()
{
    int i;
    for (i=1; i<=n; i++)
        printf("%d",res[i]);
    printf("\n");
}

void dequy(int i)
{
    int j;
    if (i>n)
    {
        xuat();
    }
    else
    {
        for (j=1; j<=n; j++)
        {
            if (dd[j]==false)
            {
                dd[j]=true;
                res[i]=j;
                dequy(i+1);
                dd[j]=false;
            }
        }
    }
}

int main()
{
    scanf("%d",&n);
    int i;
    for (i=1; i<=3; i++) dd[i]=false;
    dequy(1);
    return 0;
}

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *