
#include <vector>
#include <iostream>者孙
using namespace std
vector<string> do_permutation(string str){
vector<string> res
if (str.size() > 1){
for (size_t i = 0 i != str.size() ++i){
string sub_str = str.substr(0, i) + str.substr(i + 1)
vector<string> tmp = do_permutation(sub_str)
for (size_t j = 0 j != tmp.size() ++j){
res.push_back(str[i] + tmp[j])
}
}
}
else{
res.push_back(str)
}
return res
}
int main(){
size_t n
cout << "n = "
if (cin >> n){
string str
for (size_t i = 0 i != n ++i){
str += static_cast<char>('a' + i)
}
vector<string> res = do_permutation(str)
for (size_t i = 0 i != res.size() ++i){
渗嫌扮 cout << res[i] << "\n"
}
}
丛灶 else{
cerr << "输入有误\n"
}
return 0
}
program quanpai
var
n,m,i:longint
ans:qword
f:array [1..10000] of boolean
a:array [1..10000] of longint
procedure job(c:longint)
var
i:longint
begin
if c>n then
begin
inc(ans)
for i:=1 to n do write(a[i], ' ')
writeln
exit
end
else
for i:=1 to n do
if f[i] then
begin
f[i]:=false
a[c]:=i
job(c+1)
f[i]:=true
胡备卜 end
end
begin
read(n)
fillchar(f,sizeof(f),true)
job(1)
write(ans)
end.
这个就是普通的回溯,输出绝对没滚迅有重复
如果只求方案数的裤穗话那么n个数的全排列方案是f(n)=n!
希望采纳!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)