辽宁地级市四色图c/c++解决方案
已知沈阳为黄色,鞍山为紫色,大连为绿色,第四种颜色为蓝色,补全地图
c++代码参考地图染色(四色定理)问题_四色问题染地图_德林恩宝的博客-优快云博客
#include <iostream>
#include<string.h>
using namespace std;
int main()
{
/*相邻的城市
('沈阳','鞍山'),('沈阳','抚顺'),('沈阳','本溪'),('沈阳','锦州'),('沈阳','阜新'),
('沈阳','铁岭'),('沈阳','辽阳'),('大连','鞍山'),('大连','丹东'),('大连','营口'),
('鞍山','丹东'),('鞍山','锦州'),('鞍山','营口'),('鞍山','辽阳'),('鞍山','盘锦'),
('抚顺','本溪'),('抚顺','铁岭'),('本溪','丹东'),('本溪','辽阳'),('丹东','辽阳'),
('锦州','阜新'),('锦州','盘锦'),('锦州','朝阳'),('锦州','葫芦岛'),('营口','盘锦'),
('阜新','朝阳'),('朝阳','葫芦岛')
如果用二维数组:map[ i ][ j ] = 1可表示 板块 i 和板块 j 相邻*/
int map[14][14] = {{0,0,1,1,1,0,1,0,1,0,0,1,0,1},
{0,0,1,0,0,1,0,1,0,0,0,0,0,0},
{1,1,0,0,0,1,1,1,0,0,0,1,1,0},
{1,0,0,0,1,0,0,0,0,0,0,0,0,1},
{1,0,0,1,0,1,0,0,0,0,0,1,0,0},
{0,1,1,0,1,0,0,0,0,0,0,1,0,0},
{1,0,1,0,0,0,0,0,1,1,1,0,0,0}
,{0,1,1,0,0,0,0,0,0,0,0,0,1,0}
,{1,0,0,0,0,0,1,0,0,1,0,0,0,0}
,{0,0,0,0,0,0,1,0,1,0,1,0,0,0}
,{0,0,0,0,0,0,1,0,0,1,0,0,0,0}
,{1,0,1,0,1,1,0,0,0,0,0,0,0,0}
,{0,0,1,0,0,0,1,1,0,0,0,0,0,0}
,{1,0,0,1,0,0,0,0,0,0,0,0,0,0}};
string p[14];
p[0]="沈阳",p[1]="大连" ,p[2]="鞍山",p[3]="抚顺",p[4]="本溪",p[5]="丹东",p[6]="锦州",p[7]="营口";
p[8]="阜新",p[9]="朝阳",p[10]="葫芦岛",p[11]="辽阳",p[12]="盘锦",p[13]="铁岭";
int colorpart[14];
colorpart[0]=1;
colorpart[1]=2;
colorpart[2]=3;
int i,j;
i=3,j=4;
while(i<14)
{ while(j<5&&i<14)
{int k=0;
while(k<i&&map[i][k]*colorpart[k]!=j)
k+=1;
if(k < i)//上述判断条件由于颜色相同而跳出循环,更换颜色,继续比较
j++;
else
{
colorpart[i++] = j;
j = 1;//每次从第一种颜色开始试错
}
}
if(j > 4)
j = colorpart[--i] + 1;
}
for(int i = 0;i <= 13;i++){
string c;
if(colorpart[i]==1) c="黄色";
if(colorpart[i]==2) c="绿色";
if(colorpart[i]==3) c="紫色";
if(colorpart[i]==4) c="蓝色";
cout<<p[i]<<"涂"<<c<<endl;
}
return 0;
}
结果
沈阳涂黄色
大连涂绿色
鞍山涂紫色
抚顺涂蓝色
本溪涂绿色
丹东涂黄色
锦州涂绿色
营口涂黄色
阜新涂紫色
朝阳涂黄色
葫芦岛涂紫色
辽阳涂蓝色
盘锦涂蓝色
铁岭涂绿色