我的代码如下:
for(int i = 0; i < count; i++)
{
for(int next = i++; i < count; next++)
{
int pos = -1;
if(canMerge(imp[next].info,imp[i].info,pos))
{
merge(imp[i],imp[next],pos,ttemp);
imp[i].mark = imp[next].mark =false;
}
}
}
其中imp是结构体指针;
bool canMerge(string str1,string str2,int &pos)
{
unsigned int p1 = 0, p2 = 0;
while(p1 < str1.size() && str1[p1] == str2[p2])
p1++,p2++;
pos = p1;//记录第一次不同的位置
p1++,p2++;
while(p1 < str1.size() && str1[p1] == str2[p2])//看是否只有一个地方不同
p1++,p2++;
if (p1 == str1.size())
return true;
return false;
}
void merge(const implicant &a1,const implicant &a2,int pos,implicant &goal)
{
goal.info = a1.info;
goal.info[pos] = '*';//除了不同处,其他位置都一样,不同处用*表示
goal.weight = a1.weight;//重量和轻的那个的总量相同
goal.includes = a1.includes + ':' + a2.includes;//包含的蕴涵项是两个被合并的蕴涵项包含的总和
goal.mark = true;
cout<<"目标蕴涵项为"<<goal.info<<"\t";
cout<<"目标蕴涵项重量为"<<goal.weight<<"\t";
cout<<"目标蕴涵项包含的最小项为"<<goal.includes<<"\n";
}
望会的人给点思路,谢谢。
|