主题:数字排列问题,回朔算法(帮帮忙,各位牛人)
问题
列出所有数字1到数字N的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字.
输入:n(1<=n<=9)
输出:由1至N组成的所有不重复的数字序列,每行一个序列。
样例输入
3
样列输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
我自己按书上编的程序,答案不对,请各位帮忙!
代码如下:
program h;
var
a:array[1..1000] of longint;
i, k, c, d, e, n,q:longint;
function bi(i,k:longint):boolean;
begin
for c:=1 to k-1 do
begin
if a[c]<>i then bi:=true
else
bi:=false;
end;
end;
procedure find(k:longint);
begin
if k>n then
begin
for d:=1 to n do
write(a[d]);
writeln;
end
else
for e:=1 to n do
begin
if bi(e,k) then
begin
a[k]:=e;
find(k+1);
end;
end;
end;
begin
read(n);
find(1);
end.
列出所有数字1到数字N的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字.
输入:n(1<=n<=9)
输出:由1至N组成的所有不重复的数字序列,每行一个序列。
样例输入
3
样列输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
我自己按书上编的程序,答案不对,请各位帮忙!
代码如下:
program h;
var
a:array[1..1000] of longint;
i, k, c, d, e, n,q:longint;
function bi(i,k:longint):boolean;
begin
for c:=1 to k-1 do
begin
if a[c]<>i then bi:=true
else
bi:=false;
end;
end;
procedure find(k:longint);
begin
if k>n then
begin
for d:=1 to n do
write(a[d]);
writeln;
end
else
for e:=1 to n do
begin
if bi(e,k) then
begin
a[k]:=e;
find(k+1);
end;
end;
end;
begin
read(n);
find(1);
end.