2024年5月14日发(作者:)

基本搜索算法之深度搜索

从一个简单题目开始。

例1.输出n个元素的无重复的全排列。(1<=n<=9)

在这里我们可以对每一个元素编号,形成1,2,…,8,9个数字的全排列。我们用一个一维

数组来处理,相当于有9个位置,每个位置可以放1到9,再进行重复性判断,即在每个位

置放一个数字时判断它前面是否已经使用该数字。通过数组中元素值的变化,产生全排列。

下面给出非递归例程,其中,变量k是表示位置指针,数组x用来装每个位置的值。

const n=5;

var

x:array[1..10] of integer;

k:integer; {位置指针}

function try:boolean; {判重函数}

var i:integer;

begin

for i:=1 to k-1 do

if x[i]=x[k] then

begin try:=false;exit;end;

try:=true;

end;

procedure out; {输出过程}

var i:integer;

begin

for i:=1 to n do

write(x[i]);

writeln;

end;

begin