C++

Перебор всех возможных способов размещения n различных предметов по m различным ящикам

#include <iostream>
 
 
void placement(int citems,int iter,int const cboxes,char* output)
{
    if(!citems)
    {
        for(int i=0;i<cboxes-iter;i++)
            output[i]='0';
        std::cout<<(output-iter)<<'\n';
        return;
    }
    *output='1';
    placement(citems-1,iter+1,cboxes,output+1);
    if(citems<cboxes-iter)
    {
        *output='0';
        placement(citems,iter+1,cboxes,output+1);
    }
}
 
int main()
{
    int n,m;
    std::cout<<"input count of items:";
    std::cin>>n;
    std::cout<<"\ninput count of boxes:";
    std::cin>>m;
    if(n>m)std::cout<<"No solutions";
    else if(n==m)for(int i=0;i<m;i++)std::cout<<'1';
    else
    {
        char* output=new char[m+1];
        output[m]=0;
        placement(n,0,m,output);
    }
    std::cout<<'\n';
    system("pause");
    return 0;
}
Теги:
перебор
Добавлено: 16 Сентября 2013 02:42:37 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...