麻烦算法的高手们进来,求笛卡儿积子集的问题,送100分

数据出境研究所 2009-07-19 10:51:16
在Q和B的笛卡尔积的子集中,如果任意的两个对之间没有共同元素,则称这样的子集为一个候选对集。比如,Q代表一些男人构成的集合,B代表一些女人构成的集合,那么一个候选对集合也就代表了一个可能的婚姻结合(这里不允许一夫多妻和一妻多夫)。所有可能的候选对集构成一个集合f(Q, B).如何用算法实现集合f(Q,B)?
例如:(1,2)和(a,b,c)
则:f(Q,B)={ {(1,a),(2,b)}
{(1,a),(2,c)}
{(1,b),(2,a)}
{(1,b),(2,c)}
{(1,c),(2,a)}
{(1,c),(2,b)}
}
...全文
1855 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿色夹克衫 2009-07-20
  • 打赏
  • 举报
回复
(假设B集合的元素个数大于Q集合的元素个数,毕竟现在大龄女青年的问题更不好解决)

集合元素的个数 = C(CountOfB,CountOfQ) * CountOfQ! = CountOfB! / (CountOfB - CountOfQ)!

知道了元素个数,求具体的元素也就不难了。
  • 打赏
  • 举报
回复
太感谢5楼的ToBeTough高手,要得就是这样,我赶紧的给分,,
java1109 2009-07-19
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
帮顶,带接分
ToBeTough 2009-07-19
  • 打赏
  • 举报
回复
输出换下顺序就可以拉 !
[Quote=引用 5 楼 ToBeTough 的回复:]
#include <iostream>
using namespace std;

void Swap(char& x,char& y)
{
char z;
z=x;
x=y;
y=z;
}
void p(char* people,int k,int num,char* out,int count)
{
if(k==num)
{//ouput result
for(int ii=0;ii <count;ii++)
{
// cout < <people[ii];
cout < <"{" < <people[ii] < <"," < <out[ii] < <"} ";

[/Quote]
ToBeTough 2009-07-19
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

void Swap(char& x,char& y)
{
char z;
z=x;
x=y;
y=z;
}
void p(char* people,int k,int num,char* out,int count)
{
if(k==num)
{//ouput result
for(int ii=0;ii<count;ii++)
{
// cout<<people[ii];
cout<<"{"<<people[ii]<<","<<out[ii]<<"} ";
}
cout<<endl;
}
else
for(int i=k;i<num;i++)
{
Swap(people[k],people[i]);
p(people,k+1,num,out,count);
Swap(people[k],people[i]);
}
}

void marry(char* a,int man,char* b,int woman)
{
if(man<=woman)
{
p(b,0,woman,a,man);
}
else
{
p(a,0,man,b,woman);
}
}

int main()
{
int boy;
int girl;
cout<<"boy:";
cin>>boy;
cout<<"girl:";
cin>>girl;

char a[boy];
cout<<"first "<<endl;
for(int i=0;i<boy;i++)cin>>a[i];
cout<<"second "<<endl;
char b[girl];
for(int j=0;j<girl;j++)cin>>b[j];

marry(a,boy,b,girl);
system("pause");
return 0;
}
不知道符不符合你的题意思 !
donkey301 2009-07-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 charcle 的帖子:]
在Q和B的笛卡尔积的子集中,如果任意的两个对之间没有共同元素,则称这样的子集为一个候选对集。比如,Q代表一些男人构成的集合,B代表一些女人构成的集合,那么一个候选对集合也就代表了一个可能的婚姻结合(这里不允许一夫多妻和一妻多夫)。所有可能的候选对集构成一个集合f(Q, B).如何用算法实现集合f(Q,B)?
例如:(1,2)和(a,b,c)
则:f(Q,B)={    {(1,a),(2,b)}
{(1,a),(2,c)}
{(1,b),(2,a)}
{(1,b),(2,c)}
{(1,c),…
[/Quote]
这个问题其实等价于从n个数取出m个数来排列,这样的算法应该很多吧。我google了一下:
http://dev.csdn.net/article/73/73556.shtm
  • 打赏
  • 举报
回复
我一直在等待,,
高手们,,

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧