地圖染色-四色定理


四色定理指出每個可以畫出來的地圖都可以至多用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;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM