c语言着色问题
Ⅰ C语言编程地图着色
书上有嘛
Ⅱ DEV C++写C语言代码 printf("sum is %d\n",sum); “” 以内的都是红色的,这是怎么回事啊。
第一,这个不是没有结果,而是dev的软件决定了你没有看到它的结果而已。你可以采取一下方法来改进:
方法一:在程序的最后加条控制输入的语句,让程序等待键盘的响应。
如getch(),getchar(),system("pause"),getch()要加头文件,conio.h.....都可达到此效果
缺点是每个程序都要进行该操作,该方法一定奏效。
方法二:前段时间看到的方法,此方法是对dev-c++进行配置,你是否能成功就没把握拉。
具体步骤:
在DevCpp --> 工具 --> 配置工具 --> 添加
标题:我的运行
程序:A.BAT
工作路径:
参数:
--> 确定
A.BAT:
----------------
@echo off
%1
echo.
pause
----------------
将该文件放在执行目录下即可(执行目录就是你安装程序的目录下面的bin文件夹下面,例如D:\Dev-Cpp\bin,在这个文件夹下面有ar.exe,ac.exe.c++.exe等很多可执行文件)大概思路是建立个批处理文件,该文件的作用同于system(“pause”);等待键盘的响应
调式程序的时候让系统每次调用该批处理文件,达到等待作用。
在vc++60下也是这么做的。
第二,你是否应该在定义变量sum之后对sum进行赋初值。不然的话运行结果一般情况下不会是你期望的那个的。
Ⅲ 四色问题C语言怎么解决
思路:建立数据结构,录入数据内容,遍历着色,输出第一个可行的着色方案。
下面就四个方面详细分析一下
首先分析数据结构:
对于地图,一个区块包含一个唯一编号数据(这个编号可以是地名,也可以是数字)用来区分该区块和其他区块的不同
另外要着色,还要考虑该区块和其他区块连接的情况
最后就是区块本身的颜色
通过上面的分析,即可建立如下数据结构:
structarea{
intnID;//这里以数字替代名称,作为地块的唯一标识
intnColor;//用1,2,3,4表示不同的颜色,用0表示还没有着色
area*pNei;//邻接的区块
intnNei;//邻接区块的数量
};
然后需要录入数据,这个请依据具体的地图进行处理,撰写相应的录入函数,填入上面的数据结构
假设录好的数据如下:
structareacity[64];//假设已经录制好了数据,初始所有城市颜色都为0
数据录好后,我们可以如下方式进行遍历,尝试着色
遍历分为个模块:一个是遍历模块,一个是校验模块
校验模块依序检查所有的城市和其邻接城市是否存在同色的情况,是则返回false,否则返回true
遍历模块则逐个城市进行上色尝试
可以考虑递归
下面给一个递归的示例:
检测模块:
boolisOk(){
for(inti=0;i<64;i++)//假设有64个城市,其初始值和城市关系已经录制完毕
{
for(intj=0;j<city[i].nNei;j++){
if(nColor==city[i].pNei[j].nColor)
returnfalse;
}
}
returntrue;
}
遍历递归模块:
booladdcity(intnIndex){
if(nIndex>=64)returntrue;//所有城市都着色了,则返回成功
for(inti=1;i<=4;i++){
city[nIndex].nColor=i;
if(isOk()){//本城市的颜色找到了
if(addcity(nIndex+1)==true){//找下一个城市的颜色
returntrue;
}else{//无法为下一个城市着色
continue;//更改本城市颜色
}
}
}
returnfalse;//没有一个颜色可行,返回上一级,重新寻找
}
调用的时候可以采用下面的方式:
if(addcity(0)==false){
printf("无法找到答案,四色定理错误! ");
}else{
printf("找到了答案,城市和着色结果如下: ");
for(inti=0;i<64;i++){
printf("city%03dcolor%d ",city[i].nID,city[i].nColor);
}
}