私は自分の課題のトピックに関する多くの研究を見つけましたが、それは私が望むものに近いですが、正確ではありません. 多くの割り当てでは、文字列の順列を見つけることが強制されているようですが、これも同様のアプローチです。私は再帰の初心者なので、コードをトレースするのに苦労しています。別の投稿でこのスニペットを見つけました:
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) になります。ソリューション。これをすべて念頭に置いて、私が見つけたこのコードは私が探しているものと似ていますか、それとも変更する必要がありますか? これは、2 つの別々の配列を並べ替える場合でも、線形配列を並べ替えるため、変更する必要があると考えています。
皆さんはどう思いますか?