Решение задачи "Перестановки(2)" с Меньшиков

Без пояснения   Просмотров: 13


Дана строка, состоящая из M символов. Вывести все перестановки символов данной строки.

Код

#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
string letters,perm;
vector<int>  amounts;
int n;
void input()
{
    string str;
    cin>>str;
    n = str.size();
    for (int i =0;i<str.size();i++)
    {
        bool isExist = false;
        for (int j = 0;j<letters.size();j++)
        {
            if (letters[j] == str[i])
            {
                amounts[j]++;
                isExist = true;
            }
        }
        if (!isExist)
        {
            letters.push_back(str[i]);
            amounts.push_back(1);
        }
    }
}
void output()
{
    //[cout - 0.2 c,printf 0.02 c]
    cout<<perm<<endl;
}
void rec(int pos)
{
    if (pos == n)
        output();
    for (int i=0;i<letters.size();i++)
    {
        if (amounts[i])
        {
            perm[pos] = letters[i];
            amounts[i]--;
            rec(pos+1);
            amounts[i]++;
            perm[pos] = '*'; // for debug only
        }
 
    }
}
void solve()
{
    perm = string(n,'*');
    rec(0);
}
int main()
{
    input();
    solve();
    return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться