回溯图的m着色问题

https://www.cnblogs.com/TWS-YIFEI/p/5757462.html


问题1:给定无向连通图G=(V, E)和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中相邻的两个顶点有不同的颜色?

问题2:这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的两个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。

回溯图的m着色问题_第1张图片
image.png

我的算法:

对now点的颜色进行穷举,然后遍历周边所有点,冲突则continue,不冲突则继续DFS,在中间记录之前走过的路径避免重复。

#include
#include
#include
#include
using namespace std;
int n=5;    //图有多少个点(从0开始)
int m=4;     //色数m(从1开始)
int a[5][5]={0,1,1,1,0,      //a数组代表无向图的邻接矩阵
             1,0,1,1,1,
             1,1,0,1,0,
             1,1,1,0,1,
             0,1,0,1,0};
mapmm;
// 存放去重后的解
mapstatus;
// 记录之前走过的路径
void print(int p[5][5],int now,vectorres,int length){
    int i,j,k;
    // 选择可选的颜色
    for(i=1;i<=m;i++){
        // 看看周边有没有互斥的颜色
        for(j=0;jres(n);         // 存放第i个点里面放的是哪一种颜色
    print(a,now,res,length);
    cout<

你可能感兴趣的:(回溯图的m着色问题)