主题:[原创]n个数的全排列!!
cmy28
[专家分:380] 发布于 2007-07-14 19:54:00
怎么编呀??
5555~~~~
才知道基本功不扎实的危害!!
回复列表 (共18个回复)
11 楼
cmy28 [专家分:380] 发布于 2007-07-16 20:48:00
看一看,等一会儿……
12 楼
cmy28 [专家分:380] 发布于 2007-07-16 20:53:00
嗬嗬,我打分大方吧,以后多帮我答些问题吧!![em9][em9]
13 楼
cmy28 [专家分:380] 发布于 2007-07-16 21:36:00
我先说声“对不起”,因为我白天没有空,刚刚才匆忙看了matodied的两个程序和abcwuhang的一个程序,发现这三个程序其实都是回溯,只不过有两个是递归回溯,一个是非递归回溯。
我要向abcwuhang道歉,我收回你的程序比matodied慢这样打击你的话,因为你们的程序一样棒(但可能我的电脑不好,这是事实~~)
我要向matodied道歉,因为我害你重新编了一个程序,不过这对你有几点好处:1、加深你对全排列的印象,帮你复习功课,免得像我一样以后才发现基本功不扎实 2、多编一个程序,多开动一下脑筋 3、多赚了30分!!
以后你们都还要多多帮忙哦!!
14 楼
007bond [专家分:540] 发布于 2007-07-17 09:48:00
var n,j,i,k:integer;b:array[0..1000] of integer;
ch: set of 1..100;
begin
readln(n);
FOR i:=1 TO n do b[i]:= 1;
WHILE b[0] = 0 do
begin
j:=n;ch:=[];k:=0;
for i:=1 to n do ch:=ch+[b[i]];
for i:=1 to n do
begin
if i in ch then k:=k+1;
end;
if k=n then
begin
for i:=1 to n do write(b[i],' ');
writeln
end;
WHILE (b[j] = n) AND (j > 0) do j:=j-1;
b[j]:=b[j]+1;
FOR i:=j+1 TO n do b[i]:=1;
end;
END.
这才是高效率的,递归太占空间了
15 楼
abcwuhang [专家分:1840] 发布于 2007-07-17 12:04:00
貌似与Matodied的相似..........
非递归
其实用广度优先搜索都可以.....
16 楼
cmy28 [专家分:380] 发布于 2007-07-17 15:33:00
对!
17 楼
cmy28 [专家分:380] 发布于 2007-07-17 15:34:00
太好了!谢谢!
18 楼
abcwuhang [专家分:1840] 发布于 2007-07-18 12:04:00
呵呵
我来回复