四色着色问题 c语言编程,四色问题C语言怎么解决

思路:建立数据结构,录入数据内容,遍历着色,输出第一个可行的着色方案。

下面就四个方面详细分析一下

首先分析数据结构:

对于地图,一个区块包含一个唯一编号数据(这个编号可以是地名,也可以是数字)用来区分该区块和其他区块的不同

另外要着色,还要考虑该区块和其他区块连接的情况

最后就是区块本身的颜色

通过上面的分析,即可建立如下数据结构:struct area{

int nID;//这里以数字替代名称,作为地块的唯一标识

int nColor;//用1,2,3,4表示不同的颜色,用0表示还没有着色

area* pNei;//邻接的区块

int nNei;//邻接区块的数量

};

然后需要录入数据,这个请依据具体的地图进行处理,撰写相应的录入函数,填入上面的数据结构

假设录好的数据如下:struct area city[64];//假设已经录制好了数据,初始所有城市颜色都为0

数据录好后,我们可以如下方式进行遍历,尝试着色

遍历分为个模块:一个是遍历模块,一个是校验模块

校验模块依序检查所有的城市和其邻接城市是否存在同色的情况,是则返回false,否则返回true

遍历模块则逐个城市进行上色尝试

可以考虑递归

下面给一个递归的示例:

检测模块:bool isOk(){

for(int i=0;i<64;i++)//假设有64个城市,其初始值和城市关系已经录制完毕

{

for(int j=0;j

if(nColor == city[i].pNei[j].nColor)

return false;

}

}

return true;

}

遍历递归模块:bool addcity(int nIndex){

if(nIndex>=64) return true;//所有城市都着色了,则返回成功

for(int i=1;i<=4;i++){

city[nIndex].nColor=i;

if(isOk()){//本城市的颜色找到了

if(addcity(nIndex+1)==true){//找下一个城市的颜色

return true;

}else{//无法为下一个城市着色

continue;//更改本城市颜色

}

}

}

return false;//没有一个颜色可行,返回上一级,重新寻找

}

调用的时候可以采用下面的方式:if(addcity(0)==false){

printf("无法找到答案,四色定理错误!

");

}else{

printf("找到了答案,城市和着色结果如下:

");

for(int i=0;i<64;i++){

printf("city %03d color %d

",city[i].nID,city[i].nColor);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>