資源簡介
給定1個1000行×20列的0-1矩陣,對于該矩陣的任意1列,其中值為1的元素的數量不超過10%。設有兩個非空集合A和B,每個集合由矩陣的若干列組成。集合A和B互斥是指對于矩陣的任意一行,同時滿足下列2個條件:1)若A中有一個或多個元素在這一行上的值是1,則B中的元素在這一行全部是0;2)若B中有一個或多個元素在這一行上的值是1,則A中的元素在這一行全部是0。請你設計一個算法,找出一對互斥集合A和B,使得A和B包含的列的總數最大。
代碼片段和文件信息
#include
#include
#include
#define?N?6
#define?M?5
using?namespace?std;
int?a[N][M]={?
{1?0?0?0?1}
{0?1?0?1?0}
{0?0?1?0?0}
{0?0?1?0?0}
{0?0?1?0?0}
{0?0?0?1?1}?}?;
int?aa[M]bb[M]bestA[M]bestB[M];
bool?b[M][M];
int?an=0bn=0count=0bestan=0bestbn=0;
void?find(int?d)
{
int?ij;
bool?flagaflagb;
flaga=true;flagb=true;//能否加入A或B的標志?
if((an+bn>count)&&an&&bn)
{
count=an+bn;
bestan=an;bestbn=bn;
for(int?i=0;i for(int?i=0;i }
if(d>=M)?return;
//都不加?
find(d+1);
//判斷能否加入A
for(j=0;j if((d!=bb[j])&&(!b[bb[j]][d]))?flaga=false;
if(flaga)
- 上一篇:字符串/通配符匹配C++
- 下一篇:C++_AES_ECB
評論
共有 條評論