我要一个free BASIC回溯法全排列
收藏:
0
点赞数:
0
评论数:
0
1个回答

这是一个1~9 的全排列.你看一下

简单回溯:

这个代码是我刚编的,通过了:

const max=9;

var m,n :longint;

a:array[1..max] of longint;

procedure work(j,k:longint);//j 为枚举第j个数字,k 为上次的枚举值

var i :longint;

begin

if j=m+1 then

begin

for i:=1 to m-1 do write(a[i],' ');//输出

writeln(a[m]);

end

else

for i:=k+1 to n-m+j do//第 i 个的范围是如此,k+1好理解,n-m+j可以通过数学方法证明.例 8 3,则第一个最大范围是1~6,第二个是2~7,3~8,如此

begin

a[j]:=i;

work(j+1,i);//回溯

end;

end;

begin

readln(n,m);

work(1,0);

end.

应该能看懂!

点赞数:
0
评论数:
0
关注公众号
一起学习,一起涨知识