图的M着色问题

#include<iostream>

using namespace::std;

int **neighbor;
int t,c;//t is the amounts of node,and c is the kinds of color
int workable=0;
int *color;

void input();
void dye(int i);
int main()
{
 input();
 dye(0);
 cout<<workable<<endl;
 return 0;
}

void input()
{
 cin>>t>>c;
 neighbor=new int*[t];
 color=new int[t];
 for(int i=0;i<t;i++)
 {
  neighbor[i]=new int[t];
  for(int j=0;j<t;j++)
  {
   cin>>neighbor[i][j];
  }
 }
}
void output()
{
 for(int i=0;i<t-1;i++)
 {
  cout<<color[i]<<" ";
 }
 cout<<color[t-1]<<"/n";
}
void dye(int i)
{
 if(i==t)
 {
  output();
  workable++;
 }
 else
 {
  for(int brush=1;brush<=c;brush++)
  {
   int j=0;
   for(;j<i;j++)
   {
    if(neighbor[j][i]==1&&color[j]==brush)break; 
   }
   if(j!=i)continue;
   else
   {
    color[i]=brush;
    dye(i+1);
   }
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值