0
点赞
收藏
分享

微信扫一扫

图的m着色问题

莞尔小迷糊 2022-05-03 阅读 34
算法c++
#include<iostream>
#define NUM 100
using namespace std;

int n; // 图的顶点数量
int m; // 可用颜色数量
int a[NUM][NUM]; // 图的邻接矩阵
int x[NUM]; // 当前的解向量
int sum; // 已经找到的可m着色的方案数量

// 形参t是回溯的深度 
bool same(int t){
	
	int i;
	for(i = 1; i<=n; i++)
		if(a[t][i]==1 && x[i]==x[t])
			return false;

	return true;
	
}

void traceback(int t){
	
	// 到达叶子结点, 获得一种着色方案 
	if(t > n){
		
		sum++;
		for(int i=1; i<=n; i++)
			printf("%d", x[i]);
		printf("\n");

		return;
	}
	// 搜索当前扩展结点的m个孩子	
	for(int i=1; i<=m; i++){
		x[t] = i;
		if(same(t)) traceback(t+1);
		x[t] = 0;
	}
	
} 
举报

相关推荐

0 条评论