一个排列组合的算法问题,求解。

来源:百度知道 编辑:UC知道 时间:2024/05/05 20:15:09
原题:公司有10个部门,每个部门2-8人不等,现要求每个部门出1个人参加某活动,求所有可能的组合。

我的基本思路:
假设部门用大写字母的变量表示,人员用小写字母表示,可以是
A=abcde
B=fghijklm
C=nop
D=......
E
.
.
.
(……26字母不够用-_-!!)
然后每个变量里去一个字母组成组合,可是具体怎么写呢,那位大虾提供下思路,最好用C系列语言,非常感谢!

可以如此实现:
10个数组表示10各部门,如楼主所说可用字符表示,当然不一定只是a..z,还有阿A..Z等,ASCII 最大256足够了;

算法很简单,每个部分按顺序依次输出一个人即可。

char p[10][100];
comp(0,p);
void comp(int pos, char p[10][100])
{
if(9 < pos) return;
if(9 == pos)
{
for(int j=0; p[i][j]; ++j) printf("%c\n",p[i][j]);
}
else
{
for(int k=0; p[i][k]; ++k) printf("%c,",p[i][k]);
comp(pos+1,p);
}
}

在给数组p赋值的时候不要忘记'\0'

简单来说就是
for()
{
for()
{
for()
{
.........10层
}
}
}

这排列组合嘛~!