n个里面选m个元素的所有排列+组合dfs

内容纲要
char result[20];//用于存放结果 
char raw[n];//用于存放原始数据 
bool mark[20];//是否选定标记 
void dfs(int k)//k为当前选定标记 
{
    if (k == m)
    {
    	
        if (测试满足条件)
            //todo;
    }
    else
    {
        for (int i = 0; i < n; i++)
        {
            if (mark[i] == 0)
            {
                mark[i] = true;
                b[k] = s[i];//从s选出一个元素 
                dfs(k + 1);
                mark[i] = false;
            }
        }
    }
}

经测试满足排列组合数C(m,n)*A(m,m)

发表回复