




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 約瑟夫環(huán)實(shí)驗(yàn)報(bào)告1 需求分析1、以鄰接多重表為存儲結(jié)構(gòu);2、實(shí)現(xiàn)連通和非連通的無向圖的深度優(yōu)先和廣度優(yōu)先遍歷;3、要求利用棧實(shí)現(xiàn)無向圖的深度優(yōu)先遍歷;4、以用戶指定的結(jié)點(diǎn)為起點(diǎn),分別輸出每種遍歷下的結(jié)點(diǎn)訪問序列和生成樹的邊集;5、用凹入表打印生成樹;6、求出從一個結(jié)點(diǎn)到另外一個結(jié)點(diǎn),但不經(jīng)過另外一個指定結(jié)點(diǎn)的所有簡單路徑;2 概要設(shè)計(jì) 1. 設(shè)定圖的抽象數(shù)據(jù)類型2. 棧的抽象數(shù)據(jù)類型定義3. 隊(duì)列的抽象數(shù)據(jù)類型定義3 詳細(xì)設(shè)計(jì)程序設(shè)計(jì)如下:#include<stdio.h> #include <stdlib.h>#include<conio.h>
2、#define MAXQUEUE 70 /* 佇列的最大容量 */struct node /* 圖形頂點(diǎn)結(jié)構(gòu)宣告 */ int vertex; /* 頂點(diǎn)資料 */ struct node *nextnode; /* 指下一頂點(diǎn)的指標(biāo) */;typedef struct node *graph; /* 圖形的結(jié)構(gòu)新型態(tài) */struct node head61; /* 圖形頂點(diǎn)結(jié)構(gòu)數(shù)組 */int visited61; /* 遍歷記錄數(shù)組 */int queueMAXQUEUE; /* 佇列的數(shù)組宣告 */int front = -1; /* 佇列的前端 */int rear = -1; /*
3、 佇列的后端 */* - */* 建立圖形 */* - */void creategraph(int *node,int num) graph newnode; /* 新頂點(diǎn)指標(biāo) */ graph ptr; int from; /* 邊線的起點(diǎn) */ int to; /* 邊線的終點(diǎn) */ int i; for ( i = 0; i < num; i+ ) /* 讀取邊線的回路 */ from = nodei*2; /* 邊線的起點(diǎn) */ to = nodei*2+1; /* 邊線的終點(diǎn) */ /* 建立新頂點(diǎn)記憶體 */ newnode = ( graph ) malloc(sizeo
4、f(struct node); newnode->vertex = to; /* 建立頂點(diǎn)內(nèi)容 */ newnode->nextnode = NULL; /* 設(shè)定指標(biāo)初值 */ ptr = &(headfrom); /* 頂點(diǎn)位置 */ while ( ptr->nextnode != NULL ) /* 遍歷至鏈表尾 */ ptr = ptr->nextnode; /* 下一個頂點(diǎn) */ ptr->nextnode = newnode; /* 插入結(jié)尾 */ /* - */* 佇列資料的存入 */* - */int enqueue(int value)
5、 if ( rear >= MAXQUEUE ) /* 檢查佇列是否全滿 */ return -1; /* 無法存入 */ rear+; /* 后端指標(biāo)往前移 */ queuerear = value; /* 存入佇列 */* - */* 佇列資料的取出 */* - */int dequeue() if ( front = rear ) /* 檢查佇列是否是空 */ return -1; /* 無法取出 */ front+; /* 前端指標(biāo)往前移 */ return queuefront; /* 佇列取出 */* - */* 圖形的廣度優(yōu)先搜尋法 */* - */void bfs(int
6、 current) graph ptr; /* 處理第一個頂點(diǎn) */ enqueue(current); /* 將頂點(diǎn)存入佇列 */ visitedcurrent = 1; /* 記錄已遍歷過 */ printf("%d ",current); /* 印出遍歷頂點(diǎn)值 */ while ( front != rear ) /* 佇列是否是空的 */ current = dequeue(); /* 將頂點(diǎn)從佇列取出 */ ptr = headcurrent.nextnode; /* 頂點(diǎn)位置 */ while ( ptr != NULL ) /* 遍歷至鏈表尾 */ if (
7、visitedptr->vertex = 0 ) /* 如過沒遍歷過 */ enqueue(ptr->vertex); /* 遞回遍歷呼叫 */ visitedptr->vertex = 1; /* 記錄已遍歷過 */ /* 印出遍歷頂點(diǎn)值 */ printf("%d ",ptr->vertex); ptr = ptr->nextnode; /* 下一個頂點(diǎn) */ /* - */* 圖形的深度優(yōu)先搜尋法 */* - */void dfs(int current) graph ptr; visitedcurrent = 1; /* 記錄已遍歷過
8、*/ printf("%d ",current); /* 印出遍歷頂點(diǎn)值 */ ptr = headcurrent.nextnode; /* 頂點(diǎn)位置 */ while ( ptr != NULL ) /* 遍歷至鏈表尾 */ if ( visitedptr->vertex = 0 ) /* 如過沒遍歷過 */ dfs(ptr->vertex); /* 遞回遍歷呼叫 */ ptr = ptr->nextnode; /* 下一個頂點(diǎn) */ /* - */* 主程式: 建立圖形后,將遍歷內(nèi)容印出. */* - */int main()/clrscr();whi
9、le(1) char c,a; graph ptr; int i; int node 60 2 = 1, 10, 10, 1, /* 邊線數(shù)組 */ 2, 10, 10, 2, 2, 3, 3, 2, 3, 4, 4, 3, 3, 12, 12, 3, 4, 13, 13, 4, 4, 5, 5, 4, 5, 6, 6, 5, 5, 7, 7, 5, 7, 8, 8, 7, 9, 10, 10, 9, 10, 11, 11, 10, 11, 14, 14, 11, 11, 12, 12, 11, 12, 15, 15, 12, 12, 13, 13, 12, 13, 16, 16, 13, 1
10、4, 17, 17, 14, 14, 18, 18, 14, 15, 19, 19, 15, 16, 20, 20, 16, 17, 18, 18, 17, 18, 23, 23, 18, 18, 19, 19, 18, 19, 23, 23, 19, 19, 24, 24, 19, 19, 20, 20, 19, 20, 21, 21, 20, 22, 23, 23, 22, 24, 25, 25,24 ;/clrscr();printf("nnn");printf(" 圖 的 深 度 遍 歷 和 廣 度 遍 歷? Y/N?n");c=getch();
11、if(c!='y'&&'Y')exit(0); /clrscr();printf("nn");printf("以 下 為 各 城 市 的 代 碼:nn"); printf("1:烏魯木齊; 2:呼和浩特; 3:北京; 4:天津; 5:沈陽; n"); printf("6:大連; 7:長春; 8:哈爾濱; 9:西寧; 10:蘭州;n"); printf("11:西安; 12:鄭州; 13:徐州; 14:成都; 15:武漢; n"); printf(&
12、quot;16:上海; 17:昆明; 18:貴陽; 19:株州; 20:南昌;n"); printf("21:福州; 22:南寧; 23:柳州; 24:廣州; 25:深圳.n"); for (i=1;i<=25;i+ ) headi.vertex=i; /* 設(shè)定頂點(diǎn)值 */ headi.nextnode=NULL; /* 清除圖形指標(biāo) */ visitedi=0; /* 設(shè)定遍歷初值 */ creategraph(node,60); /* 建立圖形 */ printf("圖 形 的 鄰 接 鏈 表 內(nèi) 容:n"); for (i=1;i
13、<=25;i+) if(i%3=0)printf("n"); printf("頂點(diǎn)%d=>",headi.vertex); /* 頂點(diǎn)值 */ ptr=headi.nextnode; /* 頂點(diǎn)位置 */ while(ptr!=NULL) /* 遍歷至鏈表尾 */ printf("%d ",ptr->vertex); /* 印出頂點(diǎn)內(nèi)容 */ ptr=ptr->nextnode; /* 下一個頂點(diǎn) */ printf("nn");printf("請 選 擇 你 需 要 的 操 作n
14、");printf("1、圖形的廣度優(yōu)先遍歷請輸入:'g'或'G'n");printf("2、圖形的深度優(yōu)先遍歷請輸入:'s'或'S'n"); c=getch(); switch(c) case'g':case'G': printf("n請 你 輸 入 你 需 要 的 起 始 頂 點(diǎn):n"); scanf("%d",&i); /clrscr(); printf("nn"); prin
15、tf("以 下 為 各 城 市 的 代 碼:nn"); printf("1:烏魯木齊; 2:呼和浩特; 3:北京; 4:天津; 5:沈陽; n"); printf("6:大連; 7:長春; 8:哈爾濱; 9:西寧; 10:蘭州;n"); printf("11:西安; 12:鄭州; 13:徐州; 14:成都; 15:武漢; n"); printf("16:上海; 17:昆明; 18:貴陽; 19:株州; 20:南昌;n"); printf("21:福州; 22:南寧; 23:柳州; 24
16、:廣州; 25:深圳.n"); printf("圖 形 的 廣 度 優(yōu) 先 遍 歷 的 頂 點(diǎn) 內(nèi) 容:n"); bfs(i); /* 印出遍歷過程 */ printf("n"); /* 換行 */ break; case's':case'S': printf("n請 輸 入 你 需 要 的 起 始 頂 點(diǎn):n"); scanf("%d",&i); /clrscr(); printf("nn"); printf("以 下 為 各 城 市
17、 的 代 碼:nn"); printf("1:烏魯木齊; 2:呼和浩特; 3:北京; 4:天津; 5:沈陽; n"); printf("6:大連; 7:長春; 8:哈爾濱; 9:西寧; 10:蘭州;n"); printf("11:西安; 12:鄭州; 13:徐州; 14:成都; 15:武漢; n"); printf("16:上海; 17:昆明; 18:貴陽; 19:株州; 20:南昌;n"); printf("21:福州; 22:南寧; 23:柳州; 24:廣州; 25:深圳.n");
18、 printf("圖 形 的 深 度 優(yōu) 先 遍 歷 的 頂 點(diǎn) 內(nèi) 容:n"); dfs(i); /* 印出遍歷過程 */ printf("n"); /* 換行 */ break;printf("n請 問 你 是 否 要 繼 續(xù):y/n");a=getch();if(a!='y'&&'Y')exit(0);4 調(diào)試分析 1、本程序以鄰接多重表為存儲結(jié)構(gòu)。這個程序涉及到圖的生成和圖的深度以及廣度遍歷,文件的保存和讀取,還有棧和隊(duì)列的操作,另外還有森林的生成和打印,路徑的尋找。2、本程序不僅可以進(jìn)行連通無向圖的遍歷,還可以進(jìn)行非連通圖的遍歷。為了方便顯示和理解,現(xiàn)在暫且用一個大寫字母表示一個頂點(diǎn)。邊還可以附加信息,但為了方便操作,暫且不輸入信息。已經(jīng)先把圖的相關(guān)信息保存在了文本文檔里,所以要測試時直接從文件導(dǎo)入,可以減少用手輸入的麻煩,同時也可以減少輸入的錯誤。3、由于構(gòu)造圖時,后輸入的邊是插在先輸入的邊的前面。所以在輸入邊時,可以按字母從大到小的順序輸入。那么顯示圖的時候就可以按字母從小到大的順序顯示。4、程序
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育游戲化開啟幼兒多元智能發(fā)展的鑰匙
- 在線學(xué)習(xí)平臺中學(xué)生學(xué)習(xí)進(jìn)度與效果評估
- 醫(yī)療輔助型教育機(jī)器人的創(chuàng)新實(shí)踐
- 探索醫(yī)療領(lǐng)域中教育機(jī)器人的發(fā)展趨勢
- 定西職業(yè)技術(shù)學(xué)院《生物藥品》2023-2024學(xué)年第一學(xué)期期末試卷
- 四川電力職業(yè)技術(shù)學(xué)院《室內(nèi)設(shè)計(jì)2(公共類)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南城市學(xué)院《中國現(xiàn)代文學(xué)(二)》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州省黔西南州2025屆化學(xué)九上期末檢測模擬試題含解析
- 北??叼B(yǎng)職業(yè)學(xué)院《交誼舞》2023-2024學(xué)年第一學(xué)期期末試卷
- 公路貨運(yùn)行業(yè)數(shù)字化轉(zhuǎn)型與效率提升2025年智能物流與自動化倉儲研究報(bào)告
- 網(wǎng)絡(luò)安全知識手冊
- 鐵路公司質(zhì)量管理制度
- 物業(yè)公司接管公寓樓項(xiàng)目工作時間倒推計(jì)劃表(T日為入駐日)
- DB1304T 500-2025民用水表、電能表、燃?xì)獗碛?jì)量糾紛處理規(guī)范
- 湖南省長沙市寧鄉(xiāng)市2025年五年級數(shù)學(xué)第二學(xué)期期末統(tǒng)考試題含答案
- 內(nèi)蒙古赤峰市松山區(qū)2024-2025學(xué)年九年級上學(xué)期期末化學(xué)試題(含答案)
- 軟件質(zhì)量保證措施及案例
- 粉塵防爆培訓(xùn)教育
- 勞務(wù)派遣許可申請書
- CRRT的枸櫞酸抗凝(ICU)培訓(xùn)課件
- 人教版小學(xué)數(shù)學(xué)六年級下冊第三單元 《圓柱的體積》作業(yè)設(shè)計(jì)
評論
0/150
提交評論