图的m着色问题

1.     问题

图的m着色问题。给定无限连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。

2.     解析

设G有n个顶点,将顶点编号为1,2.…,n,则搜索空间为深度n的m叉完全树,将颜色编号为1,2,..,m结点<x1,x2,…,xk>(x1,x2,…,xk属于{1,…,m},1<=k<=n)表示顶点1的颜色x1,顶点2的颜色x2,…,顶点k的颜色xk。

3.     设计

 

bool check(int sum){

    for(int i=1;i<=sum;i++){

        if(f[i][sum]&&c[i]==c[sum]){

            return false;

        }

    }

    return true;

}

void dfs(int s){

    if(s>n){

        num++;

        return;

    }

    for(int i=1;i<=m;i++){

        c[s]=i;

        if(check(s)){

            dfs(s+1);

        }

        else {

            c[s]=0;

        }

    }

}

4.     分析

 

5.     源码

kitalekita/图的m着色问题.cpp at main · kitalekita/kitalekita (github.com)

posted @ 2021-06-14 15:27  kitalekita  阅读(109)  评论(1编辑  收藏  举报