思想
- 存储:国家之间只有相邻和不相邻两种关系。把国家看作顶点,用边表示两个国家相邻。考虑到每个国家都要考虑相邻关系,用邻接矩阵存储。
- 四种色号编号为1,2,3,4;国家序号用 0…n 表示;
- 用色号循环方式,给国家涂色。
- 在涂色前,先判断与当前国家相邻的国家的涂色情况:若与之相邻的国家的色号与当前国家色号相同,则用下一个色号涂色;
- 核心函数:graphColor(int k);isSafe(int k,int color); 掌握这两个函数就可以了!
以这几个省份为例:
抽象成顶点与边的关系:
代码
#pragma once
#include <iostream>
#include <cassert>
#include "DenseGraph.h"
using namespace std;
class colorMap {
private:
int colorNum = 4; //填色个数,默认四个颜色
int* colored;
DenseGraph& G;
vector<vector<bool>> vec;
public:
colorMap(DenseGraph& graph