PDA

View Full Version : Thuật toán liệt kê hoán vị



not_my_name
11-10-2009, 20:48
ĐỀ BÀI: Nhập vào số nguyên dương n và liệt kê ra màn hình các hoán vị của dãy số (1...n).
Thầy em hôm trước trong tiết Lý thuyết có cho 1 lô bài dạng như trên đó. Trong tiết cũng giải quyết hết rồi, nhưng mà đến bài này thì hết giờ nên thầy giao về nhà luôn. Trẻ con lớp 1 chắc cũng làm được bài này, nhưng mà chuyển thành thuật toán sao thấy khó quá. Em sắp phải nộp rồi,nếu ai giúp được em thì nhanh lên nha !

hang_vt
12-10-2009, 16:08
const fi='b1.inp';
fo='b1.out';

var f:text;
dd:array[1..21] of boolean;
x:array[1..21] of byte;
n:byte;

procedure inp;
begin
assign(f,fi);
reset(f);
readln(f,n);
close(f);
fillchar(dd,sizeof(dd),true);
end;

procedure pri1;
var i:byte;
begin
for i:=1 to n do
write(f,x[i],' ');
writeln(f);
end;

procedure try(i:byte);
var j:byte;
begin
for j:=1 to n do
if dd[j] then
begin
x[i]:=j;
dd[j]:=false;
if (i=n) then pri1
else try(i+1);
dd[j]:=true;
end;
end;

procedure pri;
begin
assign(f,fo);
rewrite(f);
try(1);
close(f);
end;

begin
inp;
pri;
end.