#include<fstream>
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
char shopname[100][100]; //用于记录商品的名称,例如,商品1的名称为I1等
int shopkind; //用于记录商品的种类,例如给出的实验数据总共有5种商品I1,I2,I3,I4,I5
int shop_list[100][100],num[100],affairs_num; ////tr记录事务信息(数字化之后的事务信息),l记录每条事务包含的商品数,affairs_num记录总共有多少条事务记录
int minsup=2; //实验设置的最小支持度*10
float minconf=0.8f; //实验设置的最小置信度
typedef struct
{
int * *p; ////记录i项集的所有内容(比如1项集的内容,2项集的内容,或者3项集的内容等等)
int * num; ////各个项集的支持计数(比如1项集中的每一条记录的支持度计数为多少,或者2项集中的每一条记录的支持度计数为多少等等)
int i; ////项集的项数(比如1项集,或者为2项集,或者为3项集)
int n; ////项集的数目(比如得到的1项集中有多少条记录,或者为2项集中有多少条记录,或者3项集中有多少条记录)
} Sequence;
void Data() // 文件操作,读取给定的实验数据
{
ifstream file;
file.open("Data.txt"); //读取实验数据集
int i,j,k,id;
char c[11]; //用c作为临时变量
file>>shopkind; //从文件中读取商品的种类数,保存到shopkind变量中。
for(i=1;i<=shopkind;i++)
{
file>>shopname[i];////每一种商品名称放入shopname数组
}
file>>affairs_num; //用affairs_num记录总共有多少条事务记录
for(i=1;i<=affairs_num;i++)////////将每条事务中的每个商品对应在shopname数组中的位序记录在数组tr中(相当于把商品的字符名称改为整形名称)
{
file>>id; //为每条记录设置数字编号,用id来记录事务的编号
file>>num[id]; //记录编号为id的事务中总共有多少个商品
for(j=1;j<=num[id];j++)
{
file>>c;
for(k=1;k<=shopkind;k++)
{
if(strcmp(shopname[k],c)==0) //利用商品在shopname中的位置,来标识商品的名称
{
break;
}
}
shop_list[id][j]=k; //用shop_list记录事务记录
}
}
file.close();
}
bool subset(int t,int k) ////判断名称为t的商品是否在事务k中
{
int mid,end,star;
star=1;
end=num[k]; //从左到右依次判断
for(int i=star;i<=end;i++)
{
if(shop_list[k][i]==t)