Viết chương trình liệt kê tăng dần theo thứ tự từ điển các hoán vị của các số từ 1..N
Input:tệp văn bản hoanvi.inp chứa số n,1
Viết chương trình liệt kê tăng dần theo thứ tự từ điển các hoán vị của các số từ 1..N
Input:tệp văn bản hoanvi.inp chứa số n,1
program vct;
var n:byte;
a:array[1..9] of byte;
duyet:array[1..9] of boolean;
f:text;
procedure xuat;
var j:byte;
begin
for j:=1 to n do write(f,a[j]);writeln(f);
end;
procedure try(i:byte);
var ii:byte;
begin
if i<=n then
begin
for ii:=1 to n do
if duyet[ii]=true then
begin
a[i]:=ii;
duyet[ii]:=false;
try(i+1);
duyet[ii]:=true;
end;
end
else xuat;
end;
begin
assign(f,’hoanvi.inp’);reset(f);
readln(f,n);
close(f);
assign(f,’hoanvi.out’);rewrite(f);
fillchar(duyet,sizeof(duyet),true);
try(1);
close(f);
end.
uses crt;
var f:text; n,m,i,j,t:longint; b,c:array[1..100000000]of longint;
procedure print;
var i,j,d:longint;
begin
d:=0;
for i:=1 to n do
begin
j:=1;
while (b[j]<>i)and(j<=n) do inc(j);
if j=n+1 then d:=1;
end;
if d=0 then
begin
inc(m);
for i:=1 to n do
c[m]:=c[m]*10+b[i];
end;
end;
function dequy(a:longint):longint;
var i:longint;
begin
if a=n+1 then print else
for i:=1 to n Do
begin
b[a]:=i;
dequy(a+1);
end;
end;
begin
clrscr;
assign(f,’hoanvi.inp‘);reset(f);
readln(f,n);
close(f);
assign(f,’hoanvi.out‘);rewrite(f);
dequy(1);
writeln;
for i:=1 to m do
for j:=1 to i-1 do
if c[i]<c[j] then
begin
t:=c[i]; c[i]:=c[j]; c[j]:=t;
end;
for i:=1 to m do writeln(f,c[i],’ ‘);
close(f);
end.