我发现很多关于我的作业主题的研究与我想要的很接近,但不完全是。似乎许多作业都被迫找到字符串的排列,这具有类似的方法。我是递归的新手,因此很难跟踪代码。我在另一篇文章中找到了这个片段:
void swap(char* str, int i, int j)
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
void permute(char *string, int start, int end)
{
if(start == end)
{
printf("%s\n", string);
return;
}
permute(string, start + 1, end);
int i;
for(i = start + 1; i < end; i++)
{
if(string[start] == string[i])
continue;
swap(string, start, i);
permute(string, start + 1, end);
swap(string, start, i);
}
}
从那里我可以看到基本情况是字符串的长度与 i 的索引相同。然而,对于我的任务,我们要做一些稍微不同的事情。我们被要求在可能的情侣之间扮演“媒人”的角色。我们有相同数量的男性和女性,每个人都有一个“匹配度”度量。我们的目标是最大化这个匹配度数。因此,如果是 3 男 * 3 女(总是完美的情侣数),我会:
{[M1, W1], {[M1, W1], {[M1, W2],
[M2, W2], [M2, W3], [M2, W1],
[M3, W3]} [M3, W2]} [M3, W3]}
....
// Match #(n)! or in this case 6 (3*2*1)
;
等等。我知道得到的排列数将是 (n)!其中n是对的数量。因此,10 个男人和 10 个女人将是(10)!解决方案。考虑到这一切,我发现的这段代码是否与我应该寻找的相似,还是需要修改?我相信必须修改,因为这是置换一个线性数组,我的情况可以是置换两个单独的数组。
你们有什么感想?