版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 院系 光電與信息工程學(xué)院 專業(yè) 電子信息工程 姓名 學(xué)號(hào) 電話2011級(jí) 2班 2013年 5月 22日實(shí)驗(yàn)題目數(shù)據(jù)結(jié)構(gòu)期末綜合實(shí)驗(yàn)地圖填色問(wèn)題二、問(wèn)題描述1976 年。美國(guó)科學(xué)家 APPEL 和 HAKEN 利用計(jì)算機(jī)證明了:對(duì)一張地圖,可以用不超過(guò)4 種顏色對(duì)其填色,使得相鄰的區(qū)域填上不同的顏色。要求輸入一張行政區(qū)地圖,用4 種顏色對(duì)其填色,要求相鄰的行政區(qū)域內(nèi)沒(méi)有相同的顏色,給出所有的填色方案,并統(tǒng)計(jì)方案?jìng)€(gè)數(shù)。三、數(shù)據(jù)描述首先考慮如何存儲(chǔ)行政區(qū)域圖,由于鄰接矩陣能更好地描述各行政區(qū)之間的關(guān)系,所以采用鄰接矩陣 G 來(lái)存 儲(chǔ)地圖。G I , J =1 表示 I , J 兩
2、個(gè)行政區(qū)域相鄰,為 0 表示不相鄰可采用二維數(shù)組來(lái)表示鄰接矩陣G;另外設(shè)一數(shù)組 COLORI 記錄各行政區(qū)域所填顏色, 分別取值為 1(紅色),2(黃色),3(藍(lán)色),4(綠色);數(shù)據(jù)描述如下:INT GNN;INT COLORN+1;四、概要設(shè)計(jì)1) 全局變量定義#define MAX_VERTEX_NUM 26 / 最大行政區(qū)域個(gè)數(shù)/ 鄰接矩陣數(shù)據(jù)類型的定義 typedef structchar vexsMAX_VERTEX_NUM; / 行政區(qū)域 -頂點(diǎn)向量int acrsMAX_VERTEX_NUMMAX_VERTEX_NUM;/ 鄰接矩陣int vexnum;/ 地圖當(dāng)前行政區(qū)域個(gè)數(shù)
3、Graph ;int ColorMAX_VERTEX_NUM+1;/ 地圖行政區(qū)域填充的顏色存儲(chǔ)數(shù)組long int Count=0;/ 統(tǒng)計(jì)總共的填色方案?jìng)€(gè)數(shù)2) 本程序主要包含 6 個(gè)函數(shù) :主函數(shù) main()Printf_Graph ()Load_Color ()Print_Color ()顯示行政區(qū)域的鄰接矩陣關(guān)系 對(duì)地圖行政區(qū)域進(jìn)行第一次著色 對(duì)地圖行政區(qū)域進(jìn)行各種方案著色的顯判斷這個(gè)顏色對(duì)第 n 行政區(qū)域能不能滿足要求 各函數(shù)間調(diào)用關(guān)系如下:Same_ColorMainSame_Color( 3) 主函數(shù)的偽碼main() 定義一個(gè)鄰接矩陣 G; 創(chuàng)建地圖及行政區(qū)域的鄰接矩陣;
4、顯示行政區(qū)域的鄰接矩陣關(guān)系; 對(duì)地圖進(jìn)行填充顏色; 改變顏色,顯示多種方案;五、詳細(xì)設(shè)計(jì)/ 鄰接矩陣數(shù)據(jù)類型的定義 #define MAX_VERTEX_NUM 26 / 最大行政區(qū)域個(gè)數(shù) typedef structchar vexsMAX_VERTEX_NUM;/ 行政區(qū)域 -頂點(diǎn)向量int acrsMAX_VERTEX_NUMMAX_VERTEX_NUM;/ 鄰接矩陣int vexnum;/ 地圖當(dāng)前行政區(qū)域個(gè)數(shù)Graph ;/* 函數(shù): Create_Graph *功能:建立地圖的鄰接矩陣* 說(shuō)明:輸入?yún)?shù) Graph *G 本函數(shù)很好的完成了地圖的創(chuàng)建以及行政區(qū)域之間的存儲(chǔ)。 在輸入
5、錯(cuò)誤的時(shí)候,會(huì)有相應(yīng)的指示,使得程序更加健壯。*/void Create_Graph( Graph *G ) / 建立地圖行政區(qū)域的鄰接矩陣 輸入地圖的行政區(qū)域的個(gè)數(shù) G->vexnum ; 輸入行政區(qū)域,構(gòu)造行政區(qū)域 -頂點(diǎn)向量 ; 初始化鄰接矩陣都為 0;構(gòu)造行政區(qū)域鄰接矩陣; 輸入與 V1 相鄰的行政區(qū)域,存放于 S 數(shù)組中; 相鄰的行政區(qū)域 G->acrsij=1 ; /* * 函數(shù): Printf_Graph *功能:顯示地圖行政區(qū)域的鄰接矩陣 * 說(shuō)明:輸入?yún)?shù) Graph G 。本函數(shù)很好的完成了地圖行政區(qū)域的鄰接矩陣的顯示 */ void Printf_Graph(
6、 Graph G )構(gòu)造圖形; 橫向顯示 行政區(qū)域; 縱向顯示 行政區(qū)域; 顯示鄰接矩陣;/* * 函數(shù): Same_Color*功能:判斷這個(gè)顏色對(duì)第 n 行政區(qū)域能不能滿足要求 *說(shuō)明:輸入?yún)?shù) Graph G,int n ,輸出 0 則表示滿足,輸出 1 則表示不滿足int Same_Color(Graph G,int n)Colorn 分別與前面已經(jīng)著色的幾塊比較; 相鄰并且顏色一樣,則不滿足; 顏色滿足 返回 0 顏色不滿足 返回 1/* 函數(shù): Load_Color* 功能:對(duì)地圖行政區(qū)域進(jìn)行第一次著色,始之滿足要求*說(shuō)明:輸入?yún)?shù) Graph G ,int n void Load
7、_Color( Graph G , int n )取一種顏色I(xiàn)f( 顏色滿足,沒(méi)有與前面沖突 ) 下一塊行政區(qū)域著色 Load_Color(G ,n+1);Else 嘗試另一種顏色 * 函數(shù): Print_Color*功能:對(duì)地圖行政區(qū)域進(jìn)行各種方案的顯示。 *說(shuō)明:輸入?yún)?shù) Graph G ,int m 注意:調(diào)用本函數(shù)的前提是 Color 數(shù)組中有一個(gè)正確的填充顏色的方案。void Print_Color( Graph G , int m)for(i=1;i<=4;i+) 更換顏色,新的顏色不與前面沖突,顏色滿足 下一個(gè)行政區(qū)域 Print_Color( G , m+1 ) ; 直到
8、(到最后一個(gè)行政區(qū)域 ,遞歸出口) 遍歷數(shù)組 Color ,顯示所有行政區(qū)域顏色,新的方案;主函數(shù)Void main()定義一個(gè)鄰接矩陣 G; 創(chuàng)建地圖及行政區(qū)域的鄰接矩陣; 顯示行政區(qū)域的鄰接矩陣關(guān)系; 對(duì)地圖進(jìn)行填充顏色; 改變顏色,顯示多種方案;六、測(cè)試結(jié)果七、參考文獻(xiàn)數(shù)據(jù)結(jié)構(gòu)八、附錄#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>/* 數(shù)據(jù)結(jié)構(gòu)期末綜合實(shí)驗(yàn) */題目:地圖填色問(wèn)題 #define MAX_VERTEX_NUM 26 / 最大行
9、政區(qū)域個(gè)數(shù) / 鄰接矩陣數(shù)據(jù)類型的定義 typedef structchar vexsMAX_VERTEX_NUM; / 行政區(qū)域 -頂點(diǎn)向量 int acrsMAX_VERTEX_NUMMAX_VERTEX_NUM; / 鄰接矩陣 int vexnum; / 地圖當(dāng)前行政區(qū)域個(gè)數(shù) Graph ;/* 函數(shù): Create_Graph*功能:建立地圖的鄰接矩陣* 說(shuō)明:輸入?yún)?shù) Graph *G 本函數(shù)很好的完成了地圖的創(chuàng)建以及行政區(qū)域之間的存儲(chǔ)。 在輸入錯(cuò)誤的時(shí)候,會(huì)有相應(yīng)的指示,使得程序更加健壯。void Create_Graph( Graph *G )int i , j , k , t
10、;char sMAX_VERTEX_NUM;char tempMAX_VERTEX_NUM;char V1 , V2 ;/ 建立地圖行政區(qū)域的鄰接矩陣/ 變量的定義/ 暫時(shí)存放與某一行政區(qū)域相鄰的行政區(qū)域/ 臨時(shí)數(shù)組/ 相鄰的兩個(gè)行政區(qū)域的頂點(diǎn)向量Start:G->vexnum =0;printf(" 輸入地圖的行政區(qū)域的個(gè)數(shù)/ 初始化,總的行政區(qū)域個(gè)數(shù)為(不超過(guò) 26 個(gè) ):t");scanf("%d",&G->vexnum);gets(temp);if( G->vexnum <1|G->vexnum >2
11、7) goto Start;/ 輸入的數(shù)值不在 026 之間重新開(kāi)始for(i=0;i<G->vexnum;i+)New_Input:for(t=0;t<MAX_VERTEX_NUM;t+)/ 構(gòu)造 行政區(qū)域 - 頂點(diǎn)向量/ 清空 temp 數(shù)組tempt=NULL;printf(" 請(qǐng)輸入第 %d 個(gè)行政區(qū)域 ( 用 az 單字符表示 ):",i+1);scanf("%c" , &G->vexsi); gets(temp);if(G->vexs i>'z'|G->vexs i<
12、39;a') / 輸入的單字符不符合,重新輸入printf(" 輸入的單字符不符合,重新輸入 n");goto New_Input;if(strlen(temp)>0) / 輸入的不為單字符,重新輸入printf(" 輸入的不為單字符,重新輸入 n");goto New_Input;for(t=0;t<i;t+) / 檢測(cè)當(dāng)前輸入的行政區(qū)域與之前有沒(méi)有沖突, 有沖突, 重新輸 入if(G->vexs i=G->vexs t)printf(" 輸入的行政區(qū)域之前已經(jīng)輸入過(guò),重新輸入 n");goto Ne
13、w_Input;for(i=0;i<G->vexnum;i+)/初始化鄰接矩陣for(j=0;j<G->vexnum;j+)G->acrsij=0 ;/都為 0for(k=0;k<G->vexnum;k+)/構(gòu)造行政區(qū)域鄰接矩陣New_Inputs:printf(" 請(qǐng)輸入與 %c 相鄰的行政區(qū)域 ,已有相鄰行政區(qū)域有: " ,G->vexsk); for(t=0;t<G->vexnum ;t+) / 顯示與 Mg->vexsk 已經(jīng)相鄰的行政區(qū)域 if(G->acrskt=1) printf(&quo
14、t;%c ",G->vexst);printf("n");V1=G->vexsk;/ V1 行政區(qū)域i=k; / 確定 v1 在 G->vexs 中的位置 為 i/ 清空 S 數(shù)組/ 輸入與 V1 相鄰的行政區(qū)域,存放于 S 數(shù)組中for(t=0;t<MAX_VERTEX_NUM;t+) st=NULL;t=0;while(t<G->vexnum)scanf("%c" , &st); if(s0='n') break; if(getchar()='n') break;
15、t+;/ 沒(méi)有的話就直接跳出for(t=0;t<G->vexnum ;t+) / 確定行政區(qū)域 V1 與其相鄰的行政區(qū)域的關(guān)系,遍歷數(shù)組Sif(st!=NULL&&st!='n')V2=st;for(j=0;G->vexsj!=V2;j+);if(j>G->vexnum)/ V2 行政區(qū)域 / 確定 v2/在 G 中的位置 為 j 輸入的元素不正確則顯示錯(cuò)誤 ,要求重新輸入printf(" 輸入有誤, goto New_Inputs;請(qǐng)重新輸入n");if(V1!=V2)/輸入的相鄰行政區(qū)域與本身不相同G->
16、;acrsij=G->acrsji=1;/置 v1,v2的對(duì)稱弧 v2,v1 /* 函數(shù): Printf_Graph *功能:顯示地圖行政區(qū)域的鄰接矩陣* 說(shuō)明:輸入?yún)?shù) Graph G 。本函數(shù)很好的完成了地圖行政區(qū)域的鄰接矩陣的顯示void Printf_Graph( Graph G )int i , j ;printf(" 地圖的鄰接矩陣表示,相鄰的用1表示 n" );printf(" " );for(i=0;i<G .vexnum ;i+) printf("%c" ,G.vexs i);printf("n
17、" );for(i=0;i<G .vexnum*4+3 ;i+) printf("-" );/ 構(gòu)造圖形/ 橫向顯示 行政區(qū)域/ 顯示相應(yīng)長(zhǎng)度的 -printf("n" );for(i=0;i<G .vexnum ;i+)printf("%c " ,G.vexs i);/ 縱向顯示 行政區(qū)域for(j=0;j<G.vexnum ;j+)printf("%d " ,G.acrsij); / 顯示鄰接矩陣printf("n" );/ int ColorMAX_VERTEX
18、_NUM+1; / 地圖行政區(qū)域填充的顏色存儲(chǔ)數(shù)組 long int Count=0; / 統(tǒng)計(jì)總共的填色方案?jìng)€(gè)數(shù) /* 函數(shù): Same_Color*功能:判斷這個(gè)顏色對(duì)第 n 行政區(qū)域能不能滿足要求*說(shuō)明:輸入?yún)?shù) Graph G,int n ,輸出 0 則表示滿足,輸出 1 則表示不滿足int Same_Color(Graph G,int n)int i ;for(i=0;i<n;i+)/ 分別與前面已經(jīng)著色的幾塊比較if(G.acrs ni=1&&Colori=Colorn)/相鄰并且顏色一樣,則不滿足return 1; / 與前面顏色有沖突,返回 1,表示該顏色
19、不滿足 return 0; / 沒(méi)有沖突,該顏色滿足,返回 0*函數(shù):Load_Color*功能:對(duì)地圖行政區(qū)域進(jìn)行第一次著色,始之滿足要求*說(shuō)明:輸入?yún)?shù) Graph G ,int nvoid Load_Color( Graph G , int n ) / 遞歸出口int i ;if(n>=G.vexnum )printf("n" );elsefor(i=1;i<=4;i+)Colorn=i;if(Same_Color(G ,n)=0)Load_Color(G ,n+1); break;/ 存儲(chǔ)顏色/ 顏色滿足,沒(méi)有與前面沖突/ 下一塊行政區(qū)域/* 函數(shù): Print_Color *功能:對(duì)地圖行政區(qū)域進(jìn)行各種方案的顯示。*說(shuō)明:輸入?yún)?shù) Graph G ,int m 注意:調(diào)用本函數(shù)的前提是 Color 數(shù)組中有一個(gè)正確的填充顏色的方案。void Print_Color( Graph G , int m) int i=0, j=0;for(i=1;i<=4;i+) Colorm=i;if(Same_Color(G,m)=0)if(m=G.vexnu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年三季度報(bào)天津地區(qū)A股負(fù)債合計(jì)排名前十大上市公司
- 2025版城市基礎(chǔ)設(shè)施建設(shè)委托合同范例大全3篇
- 2025年樹(shù)林資源綜合利用與循環(huán)經(jīng)濟(jì)承包合同范本3篇
- 2025年食堂食品安全風(fēng)險(xiǎn)評(píng)估承包合同3篇
- 2025年山東貨運(yùn)從業(yè)資格證500道題目及答案
- 2025版停薪留職合同模板:民營(yíng)企業(yè)員工休整計(jì)劃書(shū)3篇
- 二零二五年度城市綠化工程項(xiàng)目采購(gòu)安裝合同3篇
- 二零二五年度地質(zhì)勘探臨時(shí)駕駛員用工合同4篇
- 2025年度物流園區(qū)個(gè)人運(yùn)輸承包服務(wù)協(xié)議2篇
- 2025年度模板木方項(xiàng)目合作協(xié)議范本大全3篇
- 土地買賣合同參考模板
- 2025高考數(shù)學(xué)二輪復(fù)習(xí)-專題一-微專題10-同構(gòu)函數(shù)問(wèn)題-專項(xiàng)訓(xùn)練【含答案】
- 新能源行業(yè)市場(chǎng)分析報(bào)告
- 2025年天津市政建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 自愿斷絕父子關(guān)系協(xié)議書(shū)電子版
- 你劃我猜游戲【共159張課件】
- 專升本英語(yǔ)閱讀理解50篇
- 中餐烹飪技法大全
- 新型電力系統(tǒng)研究
- 滋補(bǔ)類用藥的培訓(xùn)
- 北師大版高三數(shù)學(xué)選修4-6初等數(shù)論初步全冊(cè)課件【完整版】
評(píng)論
0/150
提交評(píng)論