算法描述



代码

#define m 5   //m个顶点
#define n 4 //n种颜色
int a[5][5] = { 0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0 };
int color[m] = { 0 };//存储m个顶点的着色选择,可以选择的颜色为1到n
int count = 0;
int check(int num)
{
int i;
for (i = 0; i<num; i++)
{ //前num个与第num相邻的点中,不能有冲突的颜色
if (a[num][i] == 1 && color[i] == color[num])
{
return 0;
}
}
return 1;
}
void dfs(int num)
{
int i,count=0;
if (num == m) {
count++;
for (i = 0; i<m; i++)
cout<<color[i];
cout << endl;
return;
}
for (i = 1; i <= n; i++) //这里的i为颜色的种类,不是矩阵,不用从0开始
{
color[num] = i;
if (check(num))
dfs(num + 1);
}
}
int main()
{
int count=0;
int i, j;
dfs(0);
cout<<count;
return 0;
}