zoukankan      html  css  js  c++  java
  • 地图染色-四色定理

    四色定理指出每个可以画出来的地图都可以至多用4种颜色来上色,而且没有两个相接的区域会是相同的颜色。被称为相接的两个区域是指他们共有一段边界,而不是一个点。

    主要原理:从第一个区域开始染色,到每一个区域依次遍历相邻的区域,若未出现重色则将该色入栈,遍历下一个区域。若出现重色,进行换色直至四种颜色都出现重复,就回溯到上一个区域,更换颜色。

    #include <iostream>
    using namespace std;
    
    #define NUM 100
    //用图存储
    typedef struct graph
    {
        int edges[NUM][NUM];
        int v[NUM];
        int vnum, edgenum;
    } Graph;
    
    //首先用邻接矩阵作图 v[i][j]=1表示俩个国家相邻,v[i][j]=0表示不相邻
    void Coloring(Graph G)
    {
        int area = 1;     //代表当前染色数量 给第一个点染色 颜色为1 国家序号为0——NUM-1
        int nowcolor = 1; //当前颜色最大为4
        //第一个地方染色为1 如果当前区域染色不冲突则上色后将顶点入栈,否则出栈进行再次染色
        G.v[0] = 1;
        while (area < G.vnum)
        {
            while (nowcolor <= 4 && area < G.vnum)
            {
                int k = 1;
                //判断是否重色
                while (k < area && G.edges[area][k] * G.v[k] != nowcolor)
                {
                    k++;
                }
                if (k == area)
                {
                    //说明没有重复则
                    G.v[area] = nowcolor;
                    area++;
                    nowcolor = 1;
                }
                else
                {
                    nowcolor++;
                }
            }
            //回溯到上一个位置 换一个颜色继续染
            if (nowcolor > 4)
            {
                area--;
                nowcolor = G.v[area] + 1;
            }
        }
    }
  • 相关阅读:
    增加工作日排序字段
    HIVE分析函数
    hive取等分数据
    HIVE锁相关
    shell脚本启动java程序
    Jetbrain ide Avaliable servers
    SPARK调优
    SQL 十分位
    HDFS配额查询
    jQuery 选择器
  • 原文地址:https://www.cnblogs.com/dlvguo/p/11650823.html
Copyright © 2011-2022 走看看