排列的算法?不是组合的算法!!!请问
问题点数:20、回复次数:7Top
1 楼xzjxu(糊涂神仙)回复于 2001-02-02 11:09:00 得分 0
递归Top
2 楼ed9er(始祖鸟)回复于 2001-02-02 11:39:00 得分 0
还是用栈
Top
3 楼happyno9(寒风中的烟头)回复于 2001-02-02 11:41:00 得分 0
能详细说说吗?谢谢Top
4 楼happyno9(寒风中的烟头)回复于 2001-02-02 11:47:00 得分 0
各位大哥,详细点如何?
Top
5 楼friendkey(friendkey)回复于 2001-02-02 11:58:00 得分 20
这是我以前用PASCAL写的全排列的算法。
{用堆栈 }
uses crt;
const m0=20;{元素个数}
type
TStack=record
data:array[1..m0]of integer;
p:integer;
end;
var p:Tstack;
procedure null(var s:TStack);
begin
S.p:=0
end;
procedure Push(var s:TStack;Data:Integer);
begin
inc(s.p);
s.data[s.p]:=data;
end;
function Pop(var s:TStack):Integer;
begin
pop:=s.data[s.p];
dec(s.p)
end;
function exist(s:TStack;n:integer):boolean;
var i:integer;
begin
exist:=false;
for i:=1 to s.p do
if n=s.data[i] then
begin
exist:=true;
exit;
end
end;
procedure ShowStack(s:TStack);
var i,m:integer;
begin
m:=s.p;
for i:=1 to m do write(s.data[i]);
write(' ')
end;
procedure perm;
var i:integer;flag:boolean;
begin
flag:=false;
for i:=1 to m0 do
begin
if not exist(p,i) then
begin
push(p,i);
flag:=true;
perm;
pop(p)
end;{if}
end;{for}
if not flag then ShowStack(p);
end;
begin
clrscr;
perm;
end.Top
6 楼friendkey(friendkey)回复于 2001-02-02 12:01:00 得分 0
补充:实际上是用递归实现的回溯。Top
7 楼happyno9(寒风中的烟头)回复于 2001-02-02 12:49:00 得分 0
谢谢!!!我看看阿,不过,没有注释,这可不是一个好习惯哦,嘿嘿Top




