精确覆盖问题学习笔记(三)――算法的初步实现 (三)

2014-11-24 00:56:21 · 作者: · 浏览: 14
j=0;j matrix[i][j]=m_matrix[rows[i]][columns[j]];
}

void CExactCoverSolution::print(ostream&os ) const
{
os << m_solution[0];
for (int i=1;i {
os << ","< }
}

三、测试代码

[csharp]
#include
#include
#include
#include
using namespace std;

#include "ExactCoverSolution.h"

const int ELEMENT_NUM=7 ; //元素的个数
const int SUBSET_NUM=6; //子集的个数

const int U[ELEMENT_NUM]={1,2,3,4,5,6,7}; //全集
const char NAMES[SUBSET_NUM]={'A','B','C','D','E','F'}; //各子集的名字
//0-1矩阵
const int Matrix[SUBSET_NUM][ELEMENT_NUM]={
{1,0,0,1,0,0,1}
,{1,0,0,1,0,0,0}
,{0,0,0,1,1,0,0}
,{0,0,1,0,1,1,0}
,{0,1,1,0,0,1,1}
,{0,1,0,0,0,0,1}
};



int main(int argc,char* argv[])
{
vector > M(SUBSET_NUM,vector(ELEMENT_NUM));
for (int i=0;i for (int j=0;j M[i][j]=Matrix[i][j];

FULL_SET values(U,U+ELEMENT_NUM);
SUBSET_NAMES names(NAMES,NAMES+SUBSET_NUM);
CExactCoverSolution s(M,names);

if (s.search())
s.print();
cout<
system("pause");
return 0;
}

#include
#include
#include
#include
using namespace std;

#include "ExactCoverSolution.h"

const int ELEMENT_NUM=7 ; //元素的个数
const int SUBSET_NUM=6; //子集的个数

const int U[ELEMENT_NUM]={1,2,3,4,5,6,7}; //全集
const char NAMES[SUBSET_NUM]={'A','B','C','D','E','F'}; //各子集的名字
//0-1矩阵
const int Matrix[SUBSET_NUM][ELEMENT_NUM]={
{1,0,0,1,0,0,1}
,{1,0,0,1,0,0,0}
,{0,0,0,1,1,0,0}
,{0,0,1,0,1,1,0}
,{0,1,1,0,0,1,1}
,{0,1,0,0,0,0,1}
};

int main(int argc,char* argv[])
{
vector > M(SUBSET_NUM,vector(ELEMENT_NUM));
for (int i=0;i for (int j=0;j M[i][j]=Matrix[i][j];

FULL_SET values(U,U+ELEMENT_NUM);
SUBSET_NAMES names(NAMES,NAMES+SUBSET_NUM);
CExactCoverSolution s(M,names);

if (s.search())
s.print();
cout<
system("pause");
return 0;
}

四、运行结果