版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——校園導(dǎo)游咨詢系統(tǒng)</p><p><b> 1:需求分析:</b></p><p> (1)任務(wù):編制一個(gè)為來(lái)訪客人進(jìn)行最短路徑導(dǎo)游的程序</p><p> (2)要求:從學(xué)校的平面上選取n個(gè)有代表性的景點(diǎn),根據(jù)用戶指定的起點(diǎn)和終點(diǎn)輸出相應(yīng)路徑。</p><p><b
2、> 2:概要設(shè)計(jì):</b></p><p> (1) 1)a) AdjMGraph.h圖操作的函數(shù)所放的頭文件</p><p> b) AdjMGraphCreate.h圖的創(chuàng)建函數(shù)所放的頭文件</p><p> c) Dijkstra.h狄克斯特拉函數(shù)設(shè)計(jì)所放的頭文件</p><p> d) SeqList.h存
3、放順序表的頭文件</p><p> 2)SchoolGuide.c文件包括以下三個(gè)函數(shù)</p><p> void SgPrint(AdjMGraph g,int n,int distance[],int path[],int j)函數(shù),其功能是將源點(diǎn)到各個(gè)結(jié)點(diǎn)的最短距離和最短路徑的結(jié)果輸出;</p><p> void Sgblueprint()函數(shù),其功能
4、是將校園平面圖輸出;</p><p> void main(void)函數(shù),主函數(shù),功能是調(diào)用測(cè)試數(shù)據(jù)值,顯示主菜單,根據(jù)用戶輸入的i進(jìn)行不同功能操作,隨后根據(jù)用戶輸入的ch值進(jìn)行不同功能操作。</p><p> (2)該程序所使用的存儲(chǔ)結(jié)構(gòu)是順序存儲(chǔ);</p><p><b> (3)流程圖:</b></p><p&
5、gt;<b> 3</b></p><p> 1 2 </p><p><b> T</b></p><p><b> F</b></p><p> 圖1-1主函數(shù)main()
6、流程圖</p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N </b>
7、</p><p><b> Y </b></p><p> Y N</p><p> 圖1-2 SgPrint函數(shù)流程圖</p><p><b> 3:詳細(xì)設(shè)計(jì):</b></p><p> (1)/*順序表頭文件SeqLis
8、t.h*/</p><p> typedef struct</p><p><b> {</b></p><p> DataType list[MaxSize];</p><p><b> int size;</b></p><p><b> }SeqLi
9、st;</b></p><p> void ListInitiate(SeqList *L) /*初始化順序表L*/</p><p><b> {</b></p><p> L->size=0; /*定義初始化數(shù)據(jù)元素個(gè)數(shù)*/</p><p><b> }</b><
10、;/p><p> int ListLength(SeqList L) /*返回順序表L的當(dāng)前數(shù)據(jù)元素個(gè)數(shù)*/</p><p><b> {</b></p><p> return L.size;</p><p><b> }</b></p><p> int ListI
11、nsert(SeqList *L,int i,DataType x)</p><p> /*在順序表L的第i(0≤i≤size)個(gè)位置前插入數(shù)據(jù)元素值x*/</p><p> /*插入成功返回1,插入失敗返回0*/</p><p><b> {int j;</b></p><p> if(L->size&g
12、t;=MaxSize)</p><p><b> {</b></p><p> printf("順序表已滿無(wú)法插入!\n");</p><p> return 0;}</p><p> else if(i<0||i>L->size)</p><p>&
13、lt;b> {</b></p><p> printf("參數(shù)i不合法!\n");</p><p> return 0;}</p><p><b> else{</b></p><p> /*為插入做準(zhǔn)備*/</p><p> for(j=L-&g
14、t;size;j>i;j--)</p><p> L->list[j]=L->list[j-1];</p><p> L->list[i]=x;/*插入x*/</p><p> L->size++;/*元素個(gè)數(shù)加1*/</p><p> return 1;}</p><p><
15、;b> }</b></p><p> int ListDelete(SeqList *L,int i,DataType *x)</p><p><b> {</b></p><p> /*刪除順序表L中位置為i(0≤i≤size-1)的數(shù)據(jù)元素并存放到x中*/</p><p> /*刪除成功返
16、回1,刪除失敗返回0*/</p><p><b> int j;</b></p><p> if(L->size<=0)</p><p><b> {</b></p><p> printf("順序表已空無(wú)數(shù)據(jù)元素可刪!\n");</p><
17、;p> return 0;}</p><p> else if(i<0||i>L->size-1)</p><p><b> {</b></p><p> printf("參數(shù)i不合法");</p><p> return 0;}</p><p&g
18、t;<b> else</b></p><p><b> {</b></p><p> *x=L->list[i]; /*保存刪除的元素到x中*/</p><p><b> /*依次前移*/</b></p><p> for(j=i+1;j<=L->
19、size-1;j++)</p><p> L->list[j-1]=L->list[j];</p><p> L->size--;</p><p><b> return 1;</b></p><p><b> }</b></p><p><b
20、> }</b></p><p> int ListGet(SeqList L,int i,DataType *x)</p><p> /*取順序表L中第i個(gè)數(shù)據(jù)元素存于x中,成功返回1.失敗返回0*/</p><p><b> {</b></p><p> if(i<0||i>L.
21、size-1)</p><p><b> {</b></p><p> printf("參數(shù)i不合法!\n");</p><p> return 0;}</p><p><b> else</b></p><p> {*x=L.list[i];&
22、lt;/p><p> return 1;}</p><p><b> }</b></p><p> (2)/* AdjMGraph.h圖操作的函數(shù)所放的頭文件*/</p><p> #include"Seqlist.h"/*包含順序表頭文件*/</p><p> type
23、def struct</p><p><b> {</b></p><p> SeqList Vertices;/*存放結(jié)點(diǎn)的順序表*/</p><p> int edge[MaxVertices][MaxVertices];/*存放邊的鄰接矩陣*/</p><p> int numOfEdges;/*邊的條數(shù)*
24、/</p><p> }AdjMGraph;/*圖的結(jié)構(gòu)體定義*/</p><p> void Initiate(AdjMGraph *G,int n)/*初始化*/</p><p><b> {</b></p><p><b> int i,j;</b></p><p&
25、gt; for(i=0;i<n;i++)</p><p> for(j=0;j<n;j++)</p><p><b> {</b></p><p> if(i==j) G->edge[i][j]=0;</p><p> else G->edge[i][j]=MaxWeight;<
26、/p><p><b> }</b></p><p> G->numOfEdges=0;/*邊的條數(shù)置為0*/</p><p> ListInitiate(&G->Vertices);/*順序表初始化*/</p><p><b> }</b></p><p&
27、gt; void InsertVertex(AdjMGraph *G,DataType vertex)</p><p> /*在圖G中插入結(jié)點(diǎn)vertex*/</p><p><b> {</b></p><p> ListInsert(&G->Vertices,G->Vertices.size,vertex);&l
28、t;/p><p> /*順序表尾插入*/</p><p><b> }</b></p><p> void InsertEdge(AdjMGraph *G,int v1,int v2,int weight)</p><p> /*在圖G中插入邊<v1,v2>,邊<v1,v2>的權(quán)為weight
29、*/</p><p><b> {</b></p><p> if(v1<0||v1>G->Vertices.size||v2<0||v2>G->Vertices.size)</p><p><b> {</b></p><p> printf("
30、;參數(shù)v1或v2越界出錯(cuò)!\n");</p><p><b> exit(1);</b></p><p><b> }</b></p><p> G->edge[v1][v2]=weight;</p><p> G->numOfEdges++;</p>&
31、lt;p><b> }</b></p><p> void DeleteEdge(AdjMGraph *G,int v1,int v2)</p><p> /*在圖G中刪除邊<v1,v2>*/</p><p><b> {</b></p><p> if(v1<0|
32、|v1>G->Vertices.size||v2<0||v2>G->Vertices.size)</p><p><b> {</b></p><p> printf("參數(shù)v1或v2越界出錯(cuò)!\n");</p><p><b> exit(1);</b></p
33、><p><b> }</b></p><p> G->edge[v1][v2]=MaxWeight;</p><p> G->numOfEdges--;</p><p><b> }</b></p><p> void DeleteVerten(AdjMG
34、raph *G,int v)</p><p><b> /*刪除結(jié)點(diǎn)V*/</b></p><p><b> {</b></p><p> int n=ListLength(G->Vertices),i,j;</p><p> DataType x;</p><p&
35、gt; for(i=0;i<n;i++)/*計(jì)算刪除后的邊數(shù)*/</p><p> for(j=0;j<n;j++)</p><p> if((i==v||j==v)&&G->edge[i][j]>0&&G->edge[i][j]<MaxWeight)</p><p> G->numO
36、fEdges--;/*計(jì)算被刪除邊*/</p><p> for(i=v;i<n;i++) /*刪除第v行*/</p><p> for(j=0;j<n;j++)</p><p> G->edge[i][j]=G->edge[i+1][j];</p><p> for(i=0;i<n;i++) /*刪
37、除第v列*/</p><p> for(j=v;j<n;j++)</p><p> G->edge[i][j]=G->edge[i][j+1];</p><p> ListDelete(&G->Vertices,v,&x);/*刪除結(jié)點(diǎn)v*/</p><p><b> }</b&
38、gt;</p><p> int GetFirstVex(AdjMGraph G,int v)</p><p> /*在圖G中尋找序號(hào)為v的結(jié)點(diǎn)的第一個(gè)鄰接結(jié)點(diǎn)*/</p><p> /*如果這樣的鄰接結(jié)點(diǎn)存在,返回該鄰接結(jié)點(diǎn)的序號(hào);否則,返回-1*/</p><p><b> {</b></p>
39、<p><b> int col;</b></p><p> if(v<0||v>G.Vertices.size)</p><p><b> {</b></p><p> printf("參數(shù)v越界出錯(cuò)\n");</p><p><b>
40、 exit(1);</b></p><p><b> }</b></p><p> for(col=0;col<G.Vertices.size;col++)</p><p> if(G.edge[v][col]>0&&G.edge[v][col]<MaxWeight)return col;&l
41、t;/p><p> return -1;</p><p><b> }</b></p><p> int GetNextVex(AdjMGraph G,int v1,int v2)</p><p> /*在圖G中尋找v1結(jié)點(diǎn)的鄰接結(jié)點(diǎn)v2的下一個(gè)鄰接結(jié)點(diǎn)*/</p><p> /*如果這樣的
42、鄰接結(jié)點(diǎn)存在,返回該鄰接結(jié)點(diǎn)的序號(hào);否則,返回-1*/</p><p> /*v1和v2都是相應(yīng)結(jié)點(diǎn)的序號(hào)*/</p><p><b> {</b></p><p><b> int col;</b></p><p> if(v1<0||v1>G.Vertices.size||v
43、2<0||v2>G.Vertices.size)</p><p><b> {</b></p><p> printf("參數(shù)v1或v2越界出錯(cuò)!\n");</p><p><b> exit(1);</b></p><p><b> }</b
44、></p><p> for(col=v2+1;col<G.Vertices.size;col++)</p><p> if(G.edge[v1][col]>0&&G.edge[v1][col]<MaxWeight) return col;</p><p> return -1;</p><p>
45、<b> }</b></p><p> (3)/* AdjMGraphCreate.h圖的創(chuàng)建函數(shù)所放的頭文件*/</p><p> typedef struct</p><p><b> {</b></p><p> int row;/*行下標(biāo)*/</p><p>
46、; int col;/*列下標(biāo)*/</p><p> int weight;/*權(quán)值*/</p><p> }RowColWeight;/*邊信息結(jié)構(gòu)體定義*/</p><p> void CreatGraph(AdjMGraph *G,DataType V[],int n,RowColWeight E[],int e)</p><p&g
47、t; /*在圖G中插入n個(gè)結(jié)點(diǎn)信息V和e條邊信息E*/</p><p><b> {</b></p><p><b> int i,k;</b></p><p> Initiate(G,n);/*結(jié)點(diǎn)順序表初始化*/</p><p> for(i=0;i<n;i++)</p&g
48、t;<p> InsertVertex(G,V[i]);/*結(jié)點(diǎn)插入*/</p><p> for(k=0;k<e;k++)</p><p> InsertEdge(G,E[k].row,E[k].col,E[k].weight);/*邊插入*/</p><p><b> }</b></p><p
49、> (4)/* Dijkstra.h狄克斯特拉函數(shù)設(shè)計(jì)所放的頭文件*/</p><p> void Dijkstra(AdjMGraph G,int v0,int distance[],int path[])</p><p> /*帶權(quán)圖G從下標(biāo)v0結(jié)點(diǎn)到其他結(jié)點(diǎn)的最短距離distance*/</p><p> /*和最短路徑下標(biāo)path*/</
50、p><p><b> {</b></p><p> int n=G.Vertices.size;</p><p> int *s=(int *)malloc(sizeof(int)*n);</p><p> int minDis,i,j,u;</p><p><b> /*初始化*
51、/</b></p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> distance[i]=G.edge[v0][i];</p><p><b> s[i]=0;</b></p><p> if(
52、i!=v0&&distance[i]<MaxWeight) path[i]=v0;</p><p> else path[i]=-1;</p><p><b> }</b></p><p> s[v0]=1;/*標(biāo)記結(jié)點(diǎn)v0已從集合T加入到集合S中*/</p><p> /*在當(dāng)前還未到最短
53、路徑的結(jié)點(diǎn)集中選取具有最短距離的結(jié)點(diǎn)u*/</p><p> for(i=1;i<n;i++)</p><p><b> {</b></p><p> minDis=MaxWeight;</p><p> for(j=0;j<n;j++)</p><p> if(s[j]==
54、0&&distance[j]<minDis)</p><p><b> {</b></p><p><b> u=j;</b></p><p> minDis=distance[j];</p><p><b> }</b></p>&
55、lt;p> /*當(dāng)已不再存在最短路徑時(shí)算法結(jié)束;此語(yǔ)句對(duì)非連通圖是必須的*/</p><p> if(minDis==MaxWeight)return;</p><p> s[u]=1;/*標(biāo)記結(jié)點(diǎn)u已從集合T加入到集合S中*/</p><p> /*修改從v0到其他結(jié)點(diǎn)的最短距離和最短路徑*/</p><p> for(j=
56、0;j<n;j++)</p><p> if(s[j]==0&&G.edge[u][j]<MaxWeight&&distance[u]+G.edge[u][j]<distance[j])</p><p><b> {</b></p><p> /*結(jié)點(diǎn)v0經(jīng)結(jié)點(diǎn)u到其他結(jié)點(diǎn)的最短距離和最短
57、路徑*/</p><p> distance[j]=distance[u]+G.edge[u][j];</p><p> path[j]=u;</p><p><b> }</b></p><p><b> }</b></p><p><b> }<
58、/b></p><p> (5)/* SchoolGuide.c文件*/</p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p> #include<malloc.h></p><p> typed
59、ef char DataType;</p><p> #define MaxSize 100</p><p> #define MaxVertices 10</p><p> #define MaxWeight 10000</p><p> #include"AdjMGraph.h"</p><
60、p> #include"AdjMGraphCreate.h"</p><p> #include"Dijkstra.h"</p><p> void SgPrint(AdjMGraph g,int n,int distance[],int path[],int j)</p><p> { /*輸出源點(diǎn)到其他各結(jié)
61、點(diǎn)的最短距離和最短路徑*/</p><p><b> int i;</b></p><p> /*從源結(jié)點(diǎn)到其他各結(jié)點(diǎn)的最短路徑及其距離分別為:*/</p><p> printf("從該結(jié)點(diǎn)%c到其他各結(jié)點(diǎn)的最短路徑及其距離分別為:\n",g.Vertices.list[j]);</p><p&g
62、t; printf("\n");//輸出換行符</p><p> for(i=0;i<n;i++)</p><p> { /*從源結(jié)點(diǎn)到當(dāng)前結(jié)點(diǎn)的最短路徑為*/</p><p> printf("從結(jié)點(diǎn)%c到結(jié)點(diǎn)%c的最短路徑為:",g.Vertices.list[j],g.Vertices.list[i])
63、;</p><p> printf("(");//輸出左括號(hào)</p><p> if(path[i]!=-1)//源點(diǎn)到其他結(jié)點(diǎn)的最短路徑的前一結(jié)點(diǎn)判斷</p><p> { if(path[path[i]]!=-1)//該前一結(jié)點(diǎn)的前一結(jié)點(diǎn)進(jìn)行判斷</p><p><b> {</b>&l
64、t;/p><p> if(path[path[path[i]]]!=-1)//該前一結(jié)點(diǎn)的前一結(jié)點(diǎn)的前一結(jié)點(diǎn)進(jìn)行判斷</p><p><b> {</b></p><p> printf("%c,",g.Vertices.list[path[path[path[i]]]]);//輸出相應(yīng)存在的前一結(jié)點(diǎn)</p>
65、<p><b> }</b></p><p> printf("%c,",g.Vertices.list[path[path[i]]]);//輸出應(yīng)存在的前一結(jié)點(diǎn)</p><p><b> }</b></p><p> printf("%c,",g.Vertice
66、s.list[path[i]]);//輸出應(yīng)存在的前一結(jié)點(diǎn)</p><p><b> }</b></p><p> printf("%c",g.Vertices.list[i]);//輸出當(dāng)前結(jié)點(diǎn)</p><p> printf(")");//輸出換行符右括號(hào)</p><p>
67、; printf(",其最短距離為%d;\n",distance[i]);//輸出源點(diǎn)到其他結(jié)點(diǎn)的最短距離</p><p> printf("\n");//輸出換行符</p><p><b> }</b></p><p><b> }</b></p><p
68、> void Sgblueprint()</p><p> {/*顯示校園平面圖*/</p><p> printf(" ——————校園平面圖—————— \n");</p><p> printf(" B(學(xué)生宿舍)—
69、——————————————————E(商業(yè)街)\n");</p><p> printf(" / \\ / | \n");</p><p> printf(" / \\
70、 / | \n");</p><p> printf(" / \\(B到D) / | \n");</p><p> printf(" /
71、 \\ / | \n");</p><p> printf(" / \\ / | \n");</p><p> printf(&q
72、uot;A(校門口) ———————————————————D(學(xué)校食堂和 | \n");</p><p> printf("| 學(xué)校田徑場(chǎng)(學(xué)校田徑場(chǎng)在學(xué)校食堂后面)) \\ | \n");</p><p> printf("|
73、 \\(D到F) | \n");</p><p> printf("| \\ | \n");</p><p> printf("C(第一、
74、第二教學(xué)樓和校辦) —————————————— —————F(第三教學(xué)樓和實(shí)驗(yàn)樓)\n");</p><p><b> }</b></p><p> void main(void)</p><p><b> {</b></p><p> AdjMGraph g;</p>
75、;<p> char a[]={'A','B','C','D','E','F'};</p><p> RowColWeight rcw[]={{0,2,5},{0,3,30},{1,0,2},{1,4,8},{2,1,15},{2,5,7},{4,3,4},{5,3,10},{5,4,18}};<
76、;/p><p> int i,j,n=6,e=9;//i為控制控制菜單項(xiàng)的數(shù)值,j為選取源點(diǎn)的數(shù)值</p><p><b> char ch;</b></p><p> int distance[6],path[6];</p><p> printf(" 校園導(dǎo)游咨詢系統(tǒng)------您
77、身邊的導(dǎo)游 \n");</p><p> printf("\n");</p><p> printf("\n");</p><p> printf("\n");</p><p><b> /*菜單選項(xiàng)*/</b></p>&l
78、t;p> printf(" 1:請(qǐng)求校園導(dǎo)游幫組(即咨詢校園各景點(diǎn)最短路徑)\n");</p><p> printf(" 2:顯示校園平面圖\n");</p><p> printf(" 3:退出校園導(dǎo)游咨詢系統(tǒng)\n");</p><
79、;p> printf("請(qǐng)輸入你所想進(jìn)行的功能選項(xiàng):\n");</p><p> scanf("%d",&i); //輸入控制控制菜單項(xiàng)的數(shù)值i的值</p><p> CreatGraph(&g,a,n,rcw,e);//創(chuàng)建圖</p><p> switch(i){ //選擇菜單項(xiàng)的操作<
80、/p><p> case 1:system("cls");</p><p> /*調(diào)用輸出校園平面圖函數(shù)并輸出校園平面圖*/</p><p> Sgblueprint();</p><p> /*提示用戶輸入起點(diǎn)的序列號(hào)*/</p><p> printf("請(qǐng)輸入你所在地或起點(diǎn)的序
81、列號(hào)(A-F的序列號(hào)為依次0,1,2,3,4,5):\n");</p><p> scanf("%d",&j);//用戶輸入起點(diǎn)的序列號(hào)i的值</p><p> /*調(diào)用狄克斯特拉函數(shù)計(jì)算源點(diǎn)的其他各結(jié)點(diǎn)的最短路徑及其距離*/</p><p> Dijkstra(g,j,distance,path);</p>
82、<p> /*提示用戶參照校園平面圖以了解各景點(diǎn)的代號(hào)的含義*/</p><p> printf("提示:下列A、B、C等均是各景點(diǎn)的代號(hào),如有問(wèn)題,請(qǐng)參考上面的校園平面圖\n");</p><p> /*調(diào)用輸出源點(diǎn)到其他各結(jié)點(diǎn)的最短距離和最短路徑函數(shù)并輸出相應(yīng)的最短路徑和最短距離*/</p><p> SgPrint(g,
83、n,distance,path,j);</p><p><b> break;</b></p><p> case 2:system("cls");</p><p> Sgblueprint();//調(diào)用輸出校園平面圖函數(shù)并輸出校園平面圖</p><p><b> break;<
84、;/b></p><p> case 3:exit(1);break;//退出程序</p><p><b> }</b></p><p> while(3)//判斷程序是否繼續(xù)運(yùn)行</p><p><b> {</b></p><p> printf(&quo
85、t;\n您是否還想進(jìn)行其他操作(y/n):\n");//提示用戶是否還需繼續(xù)進(jìn)行其他操作</p><p> scanf("%s",&ch);//用戶輸入y/n以選擇是否仍需進(jìn)行其他操作</p><p> if(ch=='Y'||ch=='y')//判斷用戶所輸入的ch值是否為y/Y,以判斷用戶是否進(jìn)行其他操作<
86、/p><p><b> {</b></p><p> system("cls");</p><p> printf(" 校園導(dǎo)游咨詢系統(tǒng)------您身邊的導(dǎo)游 \n");</p><p> printf("\n");</p&
87、gt;<p> printf("\n");</p><p> printf("\n");</p><p><b> /*菜單選項(xiàng)*/</b></p><p> printf(" 1:請(qǐng)求校園導(dǎo)游幫組(即咨詢校園各景點(diǎn)最短路徑)\n");<
88、;/p><p> printf(" 2:顯示校園平面圖\n");</p><p> printf(" 3:退出校園導(dǎo)游咨詢系統(tǒng)\n");</p><p> printf("請(qǐng)輸入你所想進(jìn)行的功能選項(xiàng):\n");</p><p> sca
89、nf("%d",&i);</p><p> switch(i){ //選擇菜單項(xiàng)的操作</p><p> case 1:system("cls");</p><p> /*調(diào)用輸出校園平面圖函數(shù)并輸出校園平面圖*/</p><p> Sgblueprint();</p>&
90、lt;p> /*提示用戶輸入起點(diǎn)的序列號(hào)*/</p><p> printf("請(qǐng)輸入你所在地或起點(diǎn)的序列號(hào)(A-F的序列號(hào)為依次0,1,2,3,4,5):\n");</p><p> scanf("%d",&j);//用戶輸入起點(diǎn)的序列號(hào)i的值</p><p> /*調(diào)用狄克斯特拉函數(shù)計(jì)算源點(diǎn)的其他各結(jié)
91、點(diǎn)的最短路徑及其距離*/</p><p> Dijkstra(g,j,distance,path);</p><p> /*提示用戶參照校園平面圖以了解各景點(diǎn)的代號(hào)的含義*/</p><p> printf("提示:下列A、B、C等均是各景點(diǎn)的代號(hào),如有問(wèn)題,請(qǐng)參考上面的校園平面圖\n");</p><p> /*
92、調(diào)用輸出源點(diǎn)到其他各結(jié)點(diǎn)的最短距離和最短路徑函數(shù)并輸出相應(yīng)的最短路徑和最短距離*/</p><p> SgPrint(g,n,distance,path,j);</p><p><b> break;</b></p><p> case 2:system("cls");</p><p> Sg
93、blueprint();//調(diào)用輸出校園平面圖函數(shù)并輸出校園平面圖</p><p><b> break;</b></p><p> case 3:exit(1);break;//退出程序</p><p><b> }</b></p><p><b> }</b><
94、;/p><p> else return;//退出程序</p><p><b> }</b></p><p><b> }</b></p><p><b> 4:調(diào)試分析:</b></p><p> (1)a)測(cè)試數(shù)據(jù):char a[]={'
95、;A','B','C','D','E','F'};</p><p> RowColWeight rcw[]={{0,2,5},{0,3,30},{1,0,2},{1,4,8},{2,1,15},{2,5,7},{4,3,4},{5,3,10},{5,4,18}};</p><p> int n=6,
96、e=9;</p><p><b> b)測(cè)試結(jié)果:</b></p><p> (2)所遇到的問(wèn)題:</p><p> 1)SgPrint函數(shù)中的形參如何設(shè)置,通過(guò)仔細(xì)分析圖的操作等頭文件和主函數(shù),最終分析函數(shù)SgPrint中應(yīng)加入形參AdjMGraph g,int n,int distance[],int path[],int j;<
97、;/p><p> 2)Sgblueprint函數(shù)中輸出語(yǔ)句中想輸出’\’,直接鍵入’\’發(fā)現(xiàn)不能輸出’\’,最終查看消息窗口的提示信息和聯(lián)系C語(yǔ)言中有關(guān)轉(zhuǎn)義字符的相關(guān)知識(shí),知道了如果相輸出轉(zhuǎn)義字符’\’本身就必須書寫成’\\這樣的格式;</p><p> 3)在進(jìn)行菜單項(xiàng)操作時(shí),如何做到清除原有屏幕的操作,通過(guò)上網(wǎng)查資料了解到,只需加入“system(“cls”);”該語(yǔ)句即可;</
98、p><p> 4)SgPrint函數(shù)中如何實(shí)現(xiàn)輸出如“從結(jié)點(diǎn)A到結(jié)點(diǎn)B的最短路徑為:(A,C,B),其最短距離為20;”格式,通過(guò)分析Dijkstra.h和主函數(shù),最終想到只需添加“</p><p> if(path[i]!=-1)</p><p> { if(path[path[i]]!=-1)</p><p><b> {
99、</b></p><p> if(path[path[path[i]]]!=-1)</p><p><b> {</b></p><p> printf("%c,",g.Vertices.list[path[path[path[i]]]]);</p><p><b> }
100、</b></p><p> printf("%c,",g.Vertices.list[path[path[i]]]);</p><p><b> }</b></p><p> printf("%c,",g.Vertices.list[path[i]]);</p><p
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校園導(dǎo)游咨詢系統(tǒng)---數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——校園導(dǎo)游咨詢系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)游咨詢
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-校園導(dǎo)游咨詢
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)游咨詢
- 數(shù)據(jù)結(jié)構(gòu)校園導(dǎo)游咨詢課程設(shè)計(jì)報(bào)告
- 校園導(dǎo)游咨詢系統(tǒng)-中南大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)游的咨詢程序
- 數(shù)據(jù)結(jié)構(gòu)_校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu) 校園導(dǎo)游系統(tǒng)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園導(dǎo)游系統(tǒng)設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---校園交通導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-- 校園導(dǎo)游系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-校園導(dǎo)游程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-校園導(dǎo)游程序
評(píng)論
0/150
提交評(píng)論