C++编写程序,输入数n,输出n个字符的全排列,通过函数递归实现。

C++编写程序,输入数n,输出n个字符的全排列,通过函数递归实现。,第1张

#include <string>

#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!

希望采纳!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12232376.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存