pascal全排列问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:13:44
问题描述
输入:
第一行要求输入一个正整数n;
第二行要求输入字符串s。
输出:
只有一行,关于字符串s的全排列。

记住啊!是字符,不是从1~n的数字全排列!!!

什么叫做字符s的全排列……ORZ
我按照我的理解打的

program e;
var n,t,i:longint;
s:string;
a:array[1..10] of string;
b:array[1..10] of integer;
flag:array[1..10] of boolean;
procedure search(depth:integer); {depth变量表示正在搜索第几个元素}
var i:integer;
begin
if(depth>n) then {depth>n表明已经搜索到了第n个数,那么输出结果}
begin
for i:=1 to n do write(a[i]);
writeln;
inc(t);
exit; {此种结果输出后,退出该层搜索}
end;

for i:=1 to n do {枚举下一个出现的元素}
if flag[i]=false then {判断是否已经出现过}
begin
a[depth]:=chr(b[i]); {没有出现,则把第depth个数设为i}
flag[i]:=true; {给这个标志变量给出出现的标志}
search(depth+1); {递归搜索下一个元素}
flag[i]:=false; {回溯,此时恢复这个标志变量为没出现的标志}
end;
end;

begin
readln(n);
readln(s);
t:=0;
fillchar(flag,sizeof(flag),false); {赋初值,设定全部没有出现过}
for i:=1 to length(s) do
b[i]:=ord(