图论 —— 着色问题

【概述】

图着色问题(Graph Coloring Problem, GCP),是最著名的 NP-完全问题之一。

图的 m-着色问题是指:给定无向连通图 G 与 m 种不同的颜色,找出所有不同的着色法个数,使得任意相邻的 2 个顶点有着不同颜色

图的 m-着色判定问题是指:给定无向连通图 G 与 m 种不同的颜色,用这些颜色为图 G 的各顶点着色,问是否存在一种着色法使得  G 中任意相邻顶点着不同颜色

图的 m-着色优化问题是指:若一个图最少需要 m 种颜色才能使图中任意相邻的 2 个顶点着不同颜色,则称这个数 m 为该图的色数,求一个图的最小色数 m

【问题分析】

1.m-着色问题

对于 m-着色问题,其与八皇后、求子集和等问题有着相似之处,都是利用 dfs 来回溯搜索,其核心都是通过遍历找到所有的问题的子集。

int m,n,k;
int G[N][N];
int color[N];
int res;
void dfs(int x) {
    if(x == n+1) {
        res++;
        return;
    }
    else {
        for(int i=1; i<=k; i++) {
            bool flag=false;
            for(int y=1; y<=x; y++) {
                if(G[x][y]==1 && color[y]==i) {
                    flag=true;
                    break;
                }
            }
            if(flag==true)
                continue;

            color[x]=i;
            dfs(x+1);
            color[x]=0;
        }
    }
}
int main() {
    scanf("%d%d%d",&n,&m,&k);//n个点m条边k种颜色
    for(int i=1; i<=m; i++) {
        int x,y;
        scanf("%d%d",&x,&y);
        G[x][y] = 1;
        G[y][x] = 1;
    }
    dfs(1);
    printf("%d",res);
    return 0;
}

2.m-着色判定问题

m-着色判定问题是求一种染色方案数,最常见的应用是二分图的判定,即 2-着色判定问题

关于二分图的判定:点击这里

3.m-着色优化问题

关于 m-着色判定问题,存在一个猜想,即四色定理

其内容为:“任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色。”

简单来说,对于一个图,最少需要 4 种颜色就能使得图中任意相邻的两个顶点着不同颜色

【例题】

  • 图的m着色问题(洛谷-P2819):点击这里
  • 地图的四着色 (CSU-1508)(4 着色+连通块)点击这里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值