void color_greedy::greedy(subset &y)
{
int v,p=0,q=1,w;
for(int i=0;i
=0)
{
w=y.newclr[p];//取子集中一个结点 w
if(g.IsEdge(v,w))break;//若 v 和 w 邻接,则 v 不能赋给该新颜色值
else p--;//继续判断 v 是否与子集中的下一个结点邻接
}
if(p<0)//v 不与子集中任意结点邻接,则将结点 v 加入子集
{
y.newclr[q]=v;
q++;
x[v]=y.color;
}
}
}
y.n=q;//子集的大小为 q
}
void color_greedy::Coloring()//产生图的着色方案,并得到所有的着色子集集合 u
{
int r;
for(int k=1;k<=m;k++)//最多使用 m 种颜色
{
u[k-1].color=k;//赋给子集一个新的颜色值
greedy(u[k-1]);//使用贪心法找子集 u[k-1]
for(int j=0;jbreak;
if(j>=n)break;//所有结点都分配了颜色,退出循环
}
system("pause");
system("cls");
cout<