徐州工程學(xué)院數(shù)據(jù)結(jié)構(gòu)_第1頁
徐州工程學(xué)院數(shù)據(jù)結(jié)構(gòu)_第2頁
徐州工程學(xué)院數(shù)據(jù)結(jié)構(gòu)_第3頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗九 圖的最小生成樹算法的實現(xiàn)實驗預(yù)備知識:1 .理解圖最小生成樹的意義和相應(yīng)算法。2掌握帶權(quán)圖的存儲結(jié)構(gòu)。一、實驗?zāi)康?. 使學(xué)生熟悉最小生成樹的算法實現(xiàn)。2. 掌握帶權(quán)圖的存儲結(jié)構(gòu)和處理方法。二、實驗環(huán)境1. 硬件:每個學(xué)生需配備計算機(jī)一臺。操作系統(tǒng):DOS或Windows2. 軟件:DOS或 Windows操作系統(tǒng) +Turbo C三、實驗要求1. 能夠獨(dú)立完成帶權(quán)圖的存儲和最小生成樹的生成四、實驗內(nèi)容1. 在自己的U盤的“姓名+學(xué)號”文件夾中創(chuàng)建“實驗9”文件夾,本 次實驗的所有程序和數(shù)據(jù)都要求存儲到本文件夾中。2. 現(xiàn)在某電信公司要對如下圖的幾個城市之間進(jìn)行光纖連接布線,請 用合適

2、的存儲結(jié)構(gòu)將下圖存儲到計算機(jī)中方便進(jìn)行處理。3. 現(xiàn)在公司想以最小的代價將所有城市連通,方便所有城市間通信,請用 普里姆算法和克魯斯卡爾算法實現(xiàn)本圖的最小生成樹#include <stdio.h> #include <stdlib.h> #define INF 50typedef struct ArcNodeint adjvex;struct ArcNode *nextarc; int weight;ArcNode;typedef struct VNodechar data;ArcNode *firstarc; VNode,AdjList6;typedef struct

3、AdjList LH; int vexnum; int arcnum;Graph;typedef structchar nextvex; int lowcost; int know;Auxiliary_array;/ 該弧所指向的頂點位置/ 下一個臨接點/ 弧的權(quán)重/ 表結(jié)點/ 頂點信息/ 指向下一個結(jié)點/ 創(chuàng)建頭結(jié)點數(shù)組/ 圖的點的個數(shù)/ 圖的邊的個數(shù)/ 輔助數(shù)組結(jié)構(gòu)體void main (void)void buildtu (Graph*);void printgraph(Graph*);void prim( Graph *G, char u);char u;Graph UDG;Graph

4、 *G = &UDG;buildtu(G);printgraph(G); / 打印圖 printf(" 請輸入起始頂點: n"); while(getchar()!='n');u = getchar();prim(G ,u);void buildtu (Graph *G) / 建圖int search(Graph *G,char a);int i,n1,n2,w;char a,b;ArcNode *p, *q;printf(" 請輸入頂點個數(shù)和邊的條數(shù): n"); scanf("%d %d",&G-&g

5、t;vexnum,&G->arcnum);printf(" 請輸入頂點信息 n");for (i = 0; i < G->vexnum; +i) while (getchar()!='n'); scanf("%c",&G->LHi.data); G->LHi.firstarc = NULL;printf(" 請輸入有關(guān)系的結(jié)點和該邊的權(quán)重 :n"); for(i=0;i<G->arcnum;+i) while (getchar()!='n');

6、scanf("%c %c %d",&a,&b,&w); n1=search(G,a); n2=search(G,b);p=G->LHn1.firstarc; if(p = NULL)p=G->LHn1.firstarc=(ArcNode *) malloc (sizeof(ArcNode); elsewhile( p->nextarc !=NULL ) p=p->nextarc; p=p->nextarc=(ArcNode *) malloc (sizeof(ArcNode);q=G->LHn2.firstarc;

7、 if(q = NULL)q=G->LHn2.firstarc=(ArcNode *) malloc (sizeof(ArcNode); elsewhile( q->nextarc !=NULL )q=q->nextarc;q=q->nextarc=(ArcNode *) malloc (sizeof(ArcNode);p->adjvex=n2;p->weight=w;p->nextarc=NULL;q->adjvex=n1;q->weight=w;q->nextarc=NULL;int search (Graph *G,char a

8、) / 確定頂點 a 在頭結(jié)點數(shù)組中的位置 int i;for(i=0;i<G->vexnum;+i)if(G->LHi.data=a)return i;void printgraph(Graph *G)/ 打印圖int i;ArcNode *p;for (i=0 ; i < G->vexnum; +i)p=G->LHi.firstarc;printf("data:%c t",G->LHi.data);while(p!=NULL) printf("firstarc->adjvex=%d",p->adj

9、vex); p=p->nextarc;printf("n");void prim( Graph *G, char u)/ 用 prim 算法實現(xiàn)最小生成樹int search (Graph *G,char a);int minimize(Graph *G, Auxiliary_array);void printtable(Auxiliary_array);Auxiliary_array A6; / 創(chuàng)建輔助數(shù)組int i,j,seat;int location;ArcNode *p ;for (i = 0; i < G->vexnum; +i) Ai.ne

10、xtvex = '0'Ai.know = 0;Ai.lowcost = INF;location = search(G ,u);/ 確定 u 元素在頭結(jié)點數(shù)組中的位置 for (p=G->LHlocation.firstarc ; p != NULL; p=p->nextarc ) i = p->adjvex;Ai.nextvex = G->LHlocation.data;Ai.lowcost = p->weight; Ai.know = 0;Alocation.know = 1;Alocation.lowcost = 0;Alocation.ne

11、xtvex = '0'for(j=0;j<G->vexnum-1;+j)seat = minimize( G,A ); printf("select min: %dn", seat);Aseat.know = 1; p=G->LHseat.firstarc; for (p; p != NULL; p=p->nextarc) i=p->adjvex;if(Ai.know = 0 && p->weight < Ai.lowcost) Ai.nextvex = G->LHseat.data; Ai.l

12、owcost = p->weight;printtable(A); / 打印輔助數(shù)組中的信息for (j = 0; j < G->vexnum; +j)if (j != location)printf("%c<>%cn",Aj.nextvex,G->LHj.data);int minimize(Graph *G, Auxiliary_array A)/ 取出輔助數(shù)組中權(quán)值最小的頂點所在的位 置int i,place,num;num = INF;for (i = 0; i < G->vexnum; +i)if(Ai.know =

13、 0 && num >= Ai.lowcost)num = Ai.lowcost;place = i;return place;void printtable(Auxiliary_array A) / 打印輔助數(shù)組int i;for (i = 0; i < 6; i+) printf("modifier:%c lowcost:%d known:%dn", Ai.nextvex, Ai.lowcost, Ai.know);實驗總結(jié): 通過該實驗,我深刻明白到了自己對循環(huán)的能力不足,書寫代碼的邏輯性也不夠強(qiáng),相信在以后的學(xué)習(xí)中能加強(qiáng)這方面的學(xué)習(xí),爭取

14、在以后的學(xué)習(xí)中解決這兩個方面 的問題。渭輛入頂點亍數(shù)和訕的煤數(shù);渭軟人頂弋佬總*恫輛人有關(guān)展的幻人刊裟迪初釈蚩:b b &eelp d 5” o 3C 4 CL F 4W f 2fa c 5c d SL F £data:a firstarc->adjuex=1 Firstarc-iadjv#x=2firstarc>adju*x=3dta : b f irctairc_>ad juM-Of i r st arc->ad j vp 4Firs t 曰廠jsk-2d a t a:c firstarc->adjusx=Gfiratarc-Jadjvess

15、firstarc->adj ux= 5fir&tarc?Bdjuex=1 f irstarc>adjuM= 3data:dl fir5tarc->adjuex=Gfiratarc-Jadjves=5firstarc>adju#x=2dita : p f irEtBrc'>adjuM-1 f irstarc- >ad jve)c-2firstarc- >adj ux-5 data:f fir5tarc->adjuBX=2Firstarc->adj ueK=3Firstarc>adj u»x=>l 怙紈人起給頂人=select in: 2 select Binlokicost : Bknopn:1lDHCOEtknown: 1lOLlCOSt: 1knoun:1lDHCOEt:2knon: 1lcucost : 3knoun:1lQHC

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論