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);
}
}