1384全排列【51NOD】

来源:互联网 发布:linux golang 1.8 编辑:程序博客网 时间:2024/05/14 10:13

前言

研究生大部分时间都是要写C和C++了。为了熟悉语言和基本库,并且作为锻炼思维的一种手段。在51node上面做做算法题吧。

题目

1384 全排列

解法

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;//获得独立数字vector<char> getNum(const string s){        vector<char> cs;    for(int i=0;i<s.size();i++){        cs.push_back(s[i]);    }    return cs;}//全排列 cs:单个数字数组 index:当前递归深度,初始为0 void allSort(vector<char> cs,int index,vector<string> *an){    if(index==cs.size()-1){        string temp="";        for(int i=0;i<cs.size();i++)            temp.insert(temp.begin()+i,cs[i]);        an->push_back(temp);    }else{        for(int i=index;i<cs.size();i++){            swap(cs[index],cs[i]);            allSort(cs,index+1,an);            swap(cs[index],cs[i]);        }    }}int main(){    string s;    cin>>s;    vector<string> an;    vector<char> cs=getNum(s);    allSort(cs,0,&an);    //为了AC输出调整    sort(an.begin(),an.end());//排序    vector<string>::iterator iter=unique(an.begin(),an.end());    an.erase(iter,an.end());//消除重复    for(int i=0;i<an.size();i++)        cout<<an[i]<<endl;    return 0;}

总结

1。刚开始题目没看清就写也是作孽
2。为了AC输出是有讲究的
3。全排列使用递归算法完成的,记得大二时候上算法课讲过的。

0 0
原创粉丝点击