版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p> 系 (院): 計(jì)算機(jī)科學(xué)學(xué)院 </p><p> 專業(yè)班級(jí): </p><p> 姓 名: </p><p&g
2、t; 學(xué) 號(hào): </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)時(shí)間: </p><p> 設(shè)計(jì)地點(diǎn):
3、 </p><p><b> 目錄</b></p><p> 設(shè)計(jì)方案及實(shí)現(xiàn)過程******************第3頁</p><p> 實(shí)現(xiàn)代碼***********************************第4頁</p><p> 測試********************************
4、**********第19頁</p><p> 難點(diǎn)與收獲********************************第21頁</p><p><b> 設(shè)計(jì)方案及實(shí)現(xiàn)過程</b></p><p> 這次課程設(shè)計(jì)要求實(shí)現(xiàn)無向圖、有向圖、無向網(wǎng)以及有向網(wǎng)的一些基本操作以及應(yīng)用,大體的方案是先進(jìn)入界面后,選擇無向圖、有向圖、無向網(wǎng)、無向網(wǎng)
5、中的一個(gè),然后創(chuàng)建相應(yīng)的圖或者網(wǎng),創(chuàng)建好后,在此基礎(chǔ)上選擇進(jìn)行相關(guān)的操作,具體的函數(shù)放在main函數(shù)前面,通過多次函數(shù)調(diào)用已達(dá)到具體操作的實(shí)現(xiàn)。</p><p><b> 流程圖如下:</b></p><p><b> 實(shí)現(xiàn)代碼</b></p><p> #include<stdio.h></p&g
6、t;<p> # include <stdlib.h></p><p> # define maxlen 10</p><p> # define large 999</p><p> # define true 1</p><p> # define false 0</p><p>
7、; # define ok 1</p><p> # define error 0</p><p> # define overflow -2</p><p> # define null 0</p><p> typedef int status;</p><p> #include <ctype.
8、h></p><p> #include <string.h></p><p> #include <queue></p><p> #include <stack></p><p> #include <process.h></p><p> using
9、 namespace std;</p><p> #define MAX_VERTEX_NUM 20</p><p> #define MAX 1000</p><p> typedef struct{</p><p> int a[maxlen],b[maxlen],h[maxlen];</p><p>
10、char vexs[maxlen];</p><p> int vexnum,arcnum;</p><p><b> int kind;</b></p><p> int arcs[maxlen][maxlen];</p><p><b> }graph;</b></p>&
11、lt;p> typedef struct node{</p><p> int adjvex;</p><p><b> int info;</b></p><p> struct node *next;</p><p> }edgenode;</p><p> typedef
12、struct{</p><p><b> int id;</b></p><p> char data;</p><p> edgenode *link;</p><p> }vexnode; </p><p> typedef struct{</p><p>
13、 vexnode adjs[maxlen];</p><p> int vexnum,arcnum;</p><p><b> int kind;</b></p><p><b> }adjlist;</b></p><p> typedef struct qnode{</p>
14、<p><b> int data;</b></p><p> struct qnode *next;</p><p> }linkqlist; </p><p> typedef struct</p><p> {linkqlist *front;</p><p> li
15、nkqlist *rear;</p><p> } linkqueue;</p><p> typedef struct</p><p> {int stack[maxlen];</p><p><b> int top;</b></p><p> }stackstru;</p&g
16、t;<p> int cnull=-1;</p><p><b> graph g;</b></p><p> adjlist adjl;</p><p> stackstru *t;</p><p> stackstru *s;</p><p> linkqueue *
17、q;</p><p> graph printf_adjmatrix(graph g){</p><p><b> int i,j;</b></p><p> printf("鄰接矩陣:\n");</p><p> printf("vertex\t");</p>
18、<p> for (i=0;i<g.vexnum;i++) printf("%4c",g.vexs[i]);</p><p> printf("\n");</p><p> for(i=0;i<g.vexnum;i++){</p><p> printf("% 4c \t"
19、,g.vexs[i]);</p><p> for(j=0;j<g.vexnum;j++) printf("%4d",g.arcs[i][j]);</p><p> printf("\n");</p><p><b> }</b></p><p><b>
20、return g;</b></p><p><b> }</b></p><p> void create_2(graph g){ //構(gòu)造有向圖</p><p> int i,j,k,c=0;</p><p> for (i=0;i<g.vexnum;i++)</p><
21、p> for(j=0;j<g.vexnum;j++)</p><p> g.arcs[i][j]=c;</p><p> for(k=0;k<g.arcnum;k++)</p><p> g.arcs[g.a[k]-1][g.b[k]-1]=1;</p><p> printf_adjmatrix(g);</
22、p><p><b> }</b></p><p> void create_1(graph g){ //構(gòu)造無向圖</p><p> int i,j,k,c=0;</p><p> for (i=0;i<g.vexnum;i++)</p><p> for(j=0;j<g.ve
23、xnum;j++)</p><p> g.arcs[i][j]=c;</p><p> for(k=0;k<g.arcnum;k++){</p><p> g.arcs[g.a[k]-1][g.b[k]-1]=1;</p><p> g.arcs[g.b[k]-1][g.a[k]-1]=1;</p><p&g
24、t;<b> }</b></p><p> printf_adjmatrix(g);</p><p><b> }</b></p><p> graph create_4(graph g){ //構(gòu)造有向網(wǎng)</p><p> int i,j,k,c=999;</p><
25、;p> for (i=0;i<g.vexnum;i++)</p><p> for(j=0;j<g.vexnum;j++)</p><p> g.arcs[i][j]=c;</p><p> for(k=0;k<g.arcnum;k++)</p><p> g.arcs[g.a[k]-1][g.b[k]-1]
26、=g.h[k];</p><p> printf_adjmatrix(g);</p><p><b> return g;</b></p><p><b> }</b></p><p> graph create_3(graph g){ //構(gòu)造無向網(wǎng)</p><p&
27、gt; int i,j,k,c=999;</p><p> for (i=0;i<g.vexnum;i++)</p><p> for(j=0;j<g.vexnum;j++)</p><p> g.arcs[i][j]=c;</p><p> for (k=0;k<g.arcnum;k++){</p>
28、<p> g.arcs[g.a[k]-1][g.b[k]-1]=g.h[k];</p><p> g.arcs[g.b[k]-1][g.a[k]-1]=g.h[k];</p><p><b> }</b></p><p> printf_adjmatrix(g);</p><p><b>
29、 return g;</b></p><p><b> }</b></p><p> void creategraph(graph g){</p><p> switch(g.kind){</p><p> case 1:create_1(g);break;</p><p>
30、 case 2:create_2(g);break;</p><p> case 3:create_3(g);break;</p><p> case 4:create_4(g);break;</p><p> default:printf("Error\n");</p><p><b> }</b
31、></p><p><b> }</b></p><p> adjlist createlist (graph g ,adjlist adjl){ //創(chuàng)建鄰接表</p><p><b> int i;</b></p><p> edgenode *p;</p><
32、;p> if(g.kind==1||g.kind==3){//創(chuàng)建有向鄰接表</p><p> for(i=0;i<adjl.arcnum;i++){</p><p> p=(edgenode*)malloc(sizeof(edgenode));</p><p> p->adjvex=g.b[i];</p><p>
33、 p->info=g.h[i];</p><p> p->next=adjl.adjs[g.a[i]-1].link;</p><p> adjl.adjs[g.a[i]-1].link=p;</p><p><b> }</b></p><p><b> }</b></
34、p><p> if(g.kind==2||g.kind==4){//創(chuàng)建無向鄰接表</p><p> for(i=0;i<adjl.arcnum;i++){</p><p> p=(edgenode*)malloc(sizeof(edgenode));</p><p> p->info=g.h[i];</p>&
35、lt;p> p->adjvex=g.b[i];</p><p> p->next=adjl.adjs[g.a[i]-1].link;</p><p> adjl.adjs[g.a[i]-1].link=p;</p><p> p=(edgenode*)malloc(sizeof(edgenode));</p><p>
36、; p->info=g.h[i];</p><p> p->adjvex=g.a[i];</p><p> p->next=adjl.adjs[g.b[i]-1].link;</p><p> adjl.adjs[g.b[i]-1].link=p;</p><p><b> }</b><
37、/p><p><b> }</b></p><p> printf("鄰接表為:\n");</p><p> for(i=0;i<g.vexnum;i++){</p><p> printf("[%d,%c]=>",i+1,adjl.adjs[i].data);&l
38、t;/p><p> p=adjl.adjs[i].link;</p><p> while(p!=null){</p><p> printf("[%c,%d]-->",adjl.adjs[(p->adjvex)-1].data,p->info);</p><p> p=p->next;<
39、/p><p><b> }</b></p><p> printf("^\n");</p><p><b> }</b></p><p> return adjl;</p><p><b> }</b></p>&
40、lt;p> void initqueue(linkqueue *p){ //構(gòu)造空隊(duì)列</p><p> p->front=(linkqlist *)malloc(sizeof(linkqlist));</p><p> p->rear=p->front;</p><p> (p->front)->next=null;&l
41、t;/p><p><b> }</b></p><p> status empty(linkqueue *q){ //判斷是否為空</p><p><b> int v;</b></p><p> if(q->front==q->rear) v=true;</p>
42、<p> else v=false;</p><p><b> return v;</b></p><p><b> }</b></p><p> int addqueue(linkqueue *q,int e){</p><p> q->rear->next=(li
43、nkqlist *)malloc(sizeof(linkqlist));</p><p> q->rear=q->rear->next;</p><p> if(!q->rear) return -1;</p><p> q->rear->data=e;</p><p> q->rear-&g
44、t;next=null;</p><p> return ok;</p><p><b> }</b></p><p> status delqueue(linkqueue *q){ //</p><p> linkqlist *p;</p><p><b> int e;&
45、lt;/b></p><p> if (q->front==q->rear)</p><p> printf("the linklist is overflow");</p><p> else p=(q->front)->next;</p><p> (q->front)-&g
46、t;next=p->next;</p><p> e=p->data;</p><p> if(q->rear==p)</p><p> q->rear=q->front;</p><p><b> free(p);</b></p><p> return(
47、e);</p><p><b> }</b></p><p> bool visit[maxlen]; //深度優(yōu)先搜索</p><p> void DFS(adjlist adjl,int i){</p><p> edgenode *p;</p><p> visit[i
48、]=1; </p><p> printf("%c ",adjl.adjs[i].data);</p><p> for(p=adjl.adjs[i].link;p;p=p->next){</p><p> if(!visit[p->adjvex]) DFS(adjl,p->adjvex); </p><
49、;p><b> }</b></p><p><b> } </b></p><p> void DFSTraverse(adjlist adjl){ </p><p><b> int i;</b></p><p> printf("\t\t深度優(yōu)先搜
50、索 :");</p><p> for( i=0;i<maxlen;i++)</p><p> visit[i]=false;</p><p> for( i=0;i<=adjl.vexnum;i++)</p><p> if(!visit[i]) DFS(adjl,i); </p><p&g
51、t;<b> }</b></p><p> queue <int> Q;</p><p> void BFSTraverse(adjlist adjl) { //廣度優(yōu)先搜索</p><p> edgenode *w;</p><p><b> int i,j;</b><
52、;/p><p> printf("\n\t\t廣度優(yōu)先搜索 :");</p><p> for( i=0;i<maxlen;i++)</p><p> visit[i]=0;</p><p> for(i=0;i<=adjl.vexnum;i++){</p><p> if(!vi
53、sit[i]){</p><p> visit[i]=1; </p><p> printf("%c ",adjl.adjs[i].data);</p><p> Q.push(i);</p><p> while(!Q.empty()){</p><p> j=Q.front();<
54、;/p><p><b> Q.pop();</b></p><p> for( w=adjl.adjs[i].link;w;w=w->next)</p><p> if(!visit[w->adjvex]){</p><p> visit[w->adjvex]=1; </p><
55、p> printf("%c ",adjl.adjs[w->adjvex-1].data);</p><p> Q.push(w->adjvex);</p><p><b> }</b></p><p><b> }</b></p><p><b&g
56、t; }</b></p><p><b> }</b></p><p><b> }</b></p><p> status initstack(stackstru *s){ //構(gòu)造空棧</p><p><b> s->top=0;</b>&
57、lt;/p><p> return ok;</p><p><b> }</b></p><p> status push(stackstru *s,int x) { //進(jìn)棧</p><p> if (s->top==maxlen)</p><p> printf("
58、the stack is overflow!\n");</p><p><b> else{</b></p><p> s->top=s->top+1;</p><p> s->stack[s->top]=x;</p><p><b> }</b></
59、p><p><b> return 1;</b></p><p><b> }</b></p><p> status pop(stackstru *s) //出棧</p><p><b> { </b></p><p><b>
60、 int y;</b></p><p> if(s->top==0)printf("the stack is empty!\n");</p><p><b> else</b></p><p> {y=s->stack[s->top];</p><p> s-&g
61、t;top=s->top-1;</p><p><b> }</b></p><p><b> return y;</b></p><p><b> }</b></p><p> status stackempty(stackstru *s) //判斷棧是否為
62、空</p><p> { if (s->top==maxlen) return (true);</p><p> else return (false);</p><p><b> }</b></p><p> int TopologicalSort(adjlist adjl) //拓?fù)渑判?lt;/p
63、><p><b> {</b></p><p> stack <int> S;</p><p> edgenode *p;</p><p> int i,j,count=0;</p><p> printf("\n拓?fù)渑判颍?quot;);</p><
64、;p> for(i=0;i<=adjl.vexnum;i++)</p><p> if(adjl.adjs[i].id==0)S.push(i);count=0;</p><p> while(!S.empty())</p><p><b> {</b></p><p> j=S.top(); S.
65、pop(); </p><p><b> count++;</b></p><p> printf("(%d %c) ",j,adjl.adjs[j].data);</p><p> for(p=adjl.adjs[i].link;p;p=p->next)</p><p><b&g
66、t; {</b></p><p> int k=p->adjvex;</p><p> int d=--(adjl.adjs[k].id);</p><p> if(!d)S.push(k);</p><p><b> }</b></p><p><b>
67、}</b></p><p> if(count<adjl.vexnum)</p><p> { printf("\n網(wǎng)中有環(huán)!\n");</p><p> return error;</p><p><b> }</b></p><p> else
68、return ok;</p><p><b> } </b></p><p> void prim(graph g){</p><p> int i,j,k,min;</p><p> int lowcost[maxlen];</p><p> int closet[maxlen];&l
69、t;/p><p> printf("最小生成樹的邊為:\n");</p><p> for(i=1;i<g.vexnum;i++){</p><p> lowcost[i]=g.arcs[0][i];</p><p> closet[i]=1;</p><p><b> }&l
70、t;/b></p><p> closet[1]=0;</p><p><b> j=1;</b></p><p> for(i=1;i<g.vexnum;i++){</p><p> min=lowcost[j];</p><p><b> k=i;</b&
71、gt;</p><p> for(j=1;j<g.vexnum;j++)</p><p> if(lowcost[j]<min&&closet[j]!=0){</p><p> min=lowcost[j];</p><p><b> k=j;</b></p><p
72、><b> }</b></p><p> printf("(%c,%c),",g.vexs[k-1],g.vexs[closet[k-1]]);</p><p> closet[k]=0;</p><p> for(j=1;j<g.vexnum;j++)</p><p> if(
73、g.arcs[k][j]<lowcost[j]&&closet[j]!=0){</p><p> lowcost[j]=g.arcs[k][j];</p><p> closet[j]=k;</p><p><b> }</b></p><p><b> }</b>&l
74、t;/p><p><b> }</b></p><p> int ve[maxlen];</p><p> int vl[maxlen];</p><p> status toporder(adjlist adjl,stackstru *t){ //關(guān)鍵路徑</p><p> int i,
75、j,count,k;</p><p> edgenode *p;</p><p> initstack(s);</p><p> initstack(t);</p><p> for(i=0;i<adjl.vexnum;i++)</p><p> if(adjl.adjs[i].id==0) push(
76、s,i);</p><p><b> count=0;</b></p><p> for(i=0;i<adjl.vexnum;i++) ve[i]=0;</p><p> while(!stackempty(s))</p><p><b> { </b></p><
77、p> j=pop(s);push(t,j);++count;</p><p> for(p=adjl.adjs[j].link;p;p=p->next)</p><p><b> { </b></p><p> k=p->adjvex;</p><p> if(--adjl.adjs[k-1]
78、.id==0) push(s,k-1);</p><p> if(ve[j]+(p->info)>ve[k-1]) ve[k-1]=ve[j]+(p->info);</p><p><b> }</b></p><p><b> }</b></p><p> if(coun
79、t<adjl.vexnum) return error;</p><p> else return ok;</p><p><b> }</b></p><p> int criticalpath(adjlist adjl)</p><p><b> { </b></p>
80、<p> int i,j,k,dut,ee,el;</p><p> edgenode *p;</p><p> if(!toporder(adjl,t)) return error;</p><p> for(i=0;i<adjl.vexnum;i++) vl[i]=ve[i-1];</p><p> print
81、f("關(guān)鍵路徑為:\n");</p><p> while(!stackempty(t))</p><p> for(j=pop(t), p=adjl.adjs[j].link;p;p=p->next)</p><p><b> { </b></p><p> k=p->adjve
82、x; dut=(p->info);</p><p> if(vl[k]-dut<vl[j]) vl[j]=vl[k]-dut;</p><p><b> }</b></p><p> for(j=0;j<adjl.vexnum;++j)</p><p> for(p=adjl.adjs[j].l
83、ink;p;p=p->next){</p><p> k=p->adjvex;dut=p->info;</p><p> ee=ve[j];el=vl[k-1]-dut;</p><p> if(ee==el) printf("(%c,%c)->",adjl.adjs[j].data,adjl.adjs[k-1].d
84、ata);</p><p><b> }</b></p><p> return ok;</p><p><b> }</b></p><p> void shortpath_dijkstra(graph g) //有向網(wǎng)的最短路徑</p><p><b>
85、 { </b></p><p> int cost[maxlen][maxlen];</p><p> int dist[maxlen];</p><p> int path[maxlen];</p><p> int s[maxlen];</p><p> int i,j,v0,min,u;&
86、lt;/p><p> printf("\n請(qǐng)輸入起點(diǎn)的編號(hào):");</p><p> scanf("%d",&v0);</p><p><b> v0--;</b></p><p> for(i=0;i<g.vexnum;i++)</p><p
87、><b> {</b></p><p> for(j=0;j<g.vexnum;j++)</p><p> cost[i][j]=g.arcs[i][j];</p><p><b> }</b></p><p> for(i=0;i<g.vexnum;i++)</p
88、><p><b> { </b></p><p> dist[i]=cost[v0][i];</p><p> if(dist[i]<large&&dist[i]>0) path[i]=v0;</p><p><b> s[i]=0;</b></p>&
89、lt;p><b> }</b></p><p><b> s[v0]=1;</b></p><p> for(i=0;i<g.vexnum;i++)</p><p><b> { </b></p><p> min=large;</p>&l
90、t;p><b> u=v0;</b></p><p> for(j=0;j<g.vexnum;j++)</p><p> if(s[j]==0&&dist[j]<min)</p><p><b> {</b></p><p> min=dist[j];u=
91、j;</p><p><b> }</b></p><p><b> s[u]=1; </b></p><p> for(j=0;j<g.vexnum;j++)</p><p> if(s[j]==0&&dist[u]+cost[u][j]<dist[j])<
92、;/p><p><b> { </b></p><p> dist[j]=dist[u]+cost[u][j];</p><p> path[j]=u;</p><p><b> }</b></p><p><b> }</b></p>
93、<p> printf("\n頂點(diǎn)%d到各頂點(diǎn)的最短路徑長度為:\n",v0);</p><p> for(i=0;i<g.vexnum;i++)</p><p> if(s[i]==1)</p><p><b> { </b></p><p><b> u=i
94、;</b></p><p> while(u!=v0)</p><p> { printf("%4c<-",g.vexs[u]);</p><p> u=path[u];</p><p><b> }</b></p><p> printf(&quo
95、t;%4c",g.vexs[u]);</p><p> printf(":%d\n",path[i]);</p><p><b> }</b></p><p> else printf("%4c<-%4c:無路徑\n",g.vexs[i],g.vexs[v0]);</p>
96、<p><b> }</b></p><p> void ShowMainMenu(){</p><p> printf("\n");</p><p> printf("**************圖的基本操作及應(yīng)用***************\n");</p>&l
97、t;p> printf("* 1 無向圖的基本操作及應(yīng)用 *\n");</p><p> printf("* 2 有向圖的基本操作及應(yīng)用 *\n");</p><p> printf("* 3 無向網(wǎng)的基本操作及應(yīng)用
98、 *\n");</p><p> printf("* 4 有向網(wǎng)的基本操作及應(yīng)用 *\n");</p><p> printf("* 5 退出\n");</p><p> printf("*************************************
99、**********\n");</p><p><b> }</b></p><p> void UDG(){</p><p><b> int n;</b></p><p><b> do{</b></p><p> printf(
100、"\n");</p><p> printf("**************無向圖的基本操作及應(yīng)用***************\n");</p><p> printf("* 1 創(chuàng)建無向圖的鄰接矩陣 *\n");</p><p> printf(&
101、quot;* 2 創(chuàng)建無向圖的鄰接表 *\n");</p><p> printf("* 3 無向圖的深度優(yōu)先遍歷 *\n");</p><p> printf("* 4 無向圖的廣度優(yōu)先遍歷
102、*\n");</p><p> printf("* 5 退出\n");</p><p> printf("***************************************************\n");</p><p> printf("請(qǐng)選擇:");</p>
103、<p> scanf("%d",&n);</p><p> switch(n){</p><p><b> case 1:</b></p><p> printf("----------wait-------");creategraph(g);break; //鄰接矩陣&l
104、t;/p><p><b> case 2:</b></p><p> printf("----------wait-------");createlist (g,adjl);break; //鄰接表</p><p><b> case 3:</b></p><p> pri
105、ntf("----------wait-------");DFSTraverse(adjl);break; //深度優(yōu)先搜索</p><p><b> case 4:</b></p><p> printf("----------wait-------");BFSTraverse(adjl);break; //廣
106、度優(yōu)先搜索</p><p> case 5:break;</p><p><b> default:</b></p><p> printf("ERROR!");</p><p><b> }</b></p><p> }while(n!=5);
107、</p><p><b> }</b></p><p> void DG(){ </p><p><b> int n;</b></p><p><b> do{</b></p><p> printf("\n");<
108、/p><p> printf("**************有向圖的基本操作及應(yīng)用***************\n");</p><p> printf("* 1 創(chuàng)建有向圖的鄰接矩陣 *\n");</p><p> printf("* 2 創(chuàng)建有向圖的鄰接表
109、 *\n");</p><p> printf("* 3 拓?fù)渑判?*\n");</p><p> printf("* 4 退出 *\n&qu
110、ot;);</p><p> printf("***************************************************\n");</p><p> printf("請(qǐng)選擇:");</p><p> scanf("%d",&n);</p><p&
111、gt; switch(n){</p><p><b> case 1:</b></p><p> printf("--------wait-------");creategraph(g);break; //鄰接矩陣</p><p><b> case 2:</b></p>&
112、lt;p> printf("--------wait-------");createlist (g,adjl);break; //鄰接表</p><p><b> case 3:</b></p><p> printf("--------wait-------");createlist(g,adjl);Topo
113、logicalSort(adjl);break; //拓?fù)渑判?lt;/p><p> case 4:break; //退出 </p><p><b> default:</b></p><p> printf("ERROR!&q
114、uot;);</p><p><b> }</b></p><p> }while(n!=4);</p><p><b> }</b></p><p> void UDN(){ </p><p><b> int n;</b></p>
115、;<p><b> do{</b></p><p> printf("\n");</p><p> printf("**************無向網(wǎng)的基本操作及應(yīng)用***************\n");</p><p> printf("* 1 創(chuàng)建無向網(wǎng)的鄰接矩陣
116、 *\n");</p><p> printf("* 2 創(chuàng)建無向網(wǎng)的鄰接表 *\n");</p><p> printf("* 3 Prim算法求最小生成樹 *\n");</p&g
117、t;<p> printf("* 4 kraskal算法求最小生成樹 *\n");</p><p> printf("* 5 退出\n");</p><p> printf("**************************************************
118、*\n");</p><p> printf("請(qǐng)選擇:");</p><p> scanf("%d",&n);</p><p> switch(n){</p><p><b> case 1:</b></p><p> prin
119、tf("---------wait-------");creategraph(g);break; // 創(chuàng)建無向網(wǎng)的鄰接矩陣</p><p><b> case 2:</b></p><p> printf("--- ----wait-------");createlist (g,adjl);break; // 創(chuàng)建
120、無向網(wǎng)的鄰接表</p><p><b> case 3:</b></p><p> printf("---------wait-------");prim(g);break; //Prim算法求最小生成樹</p><p><b> case 4:</b></p><p
121、> printf("---------wait-------");break;</p><p> case 5:break;</p><p><b> default:</b></p><p> printf("ERROR!");</p><p><b>
122、 }</b></p><p> }while(n!=5);</p><p><b> }</b></p><p> void DN(){ </p><p><b> int n;</b></p><p><b> do{</b>&l
123、t;/p><p> printf("\n");</p><p> printf("**************有向網(wǎng)的基本操作及應(yīng)用***************\n");</p><p> printf("* 1 創(chuàng)建有向網(wǎng)的鄰接矩陣 *\n");<
124、;/p><p> printf("* 2 創(chuàng)建有向網(wǎng)的鄰接表 *\n");</p><p> printf("* 3 關(guān)鍵路徑 *\n");</p><p> printf("* 4 單
125、源頂點(diǎn)最短路徑問題 *\n");</p><p> printf("* 5 退出\n");</p><p> printf("***************************************************\n");</p><p> pr
126、intf("請(qǐng)選擇:");</p><p> scanf("%d",&n);</p><p> switch(n){</p><p><b> case 1:</b></p><p> printf("---------wait-------")
127、;creategraph(g);break; //創(chuàng)建有向網(wǎng)的鄰接矩陣</p><p><b> case 2:</b></p><p> printf("---------wait-------");createlist (g,adjl);break; //創(chuàng)建有向網(wǎng)的鄰接表</p><p><b>
128、 case 3:</b></p><p> printf("---------wait-------");criticalpath(adjl);break; //關(guān)鍵路徑</p><p><b> case 4:</b></p><p> printf("---------wait-------
129、");criticalpath(adjl);break; //單源頂點(diǎn)最短路徑問題</p><p> case 5:break; //退出</p><p><b> default:</b></p><p> printf(&
130、quot;ERROR!");</p><p><b> }</b></p><p> }while(n!=5);</p><p><b> }</b></p><p> void main(){</p><p> int i,j,k,h,n;</p&
131、gt;<p><b> do{</b></p><p> ShowMainMenu();</p><p> printf("請(qǐng)選擇:");</p><p> scanf("%d",&n);</p><p> if(n>5) error;<
132、/p><p><b> else</b></p><p><b> {</b></p><p><b> g.kind=n;</b></p><p><b> h=n;</b></p><p> printf("請(qǐng)輸
133、入頂點(diǎn)數(shù),邊數(shù):");</p><p> scanf("%d,%d",&i,&j);</p><p> g.vexnum=i;adjl.vexnum=i;</p><p> g.arcnum=j;adjl.arcnum=j;</p><p> for (i=0;i<g.vexnum;
134、i++){</p><p> printf("第%d個(gè)頂點(diǎn)的信息:",i+1);</p><p> scanf("%s",&g.vexs[i]);</p><p> adjl.adjs[i].data=g.vexs[i];</p><p> adjl.adjs[i].link=null;
135、</p><p> adjl.adjs[i].id=0;</p><p><b> }</b></p><p> for (k=1;k<=g.arcnum;k++)</p><p><b> {//label:</b></p><p> if (g.kind=
136、=2||g.kind==4)</p><p> printf("第%d條邊的起點(diǎn)編號(hào),終點(diǎn)編號(hào):",k);</p><p> else printf("第%d條邊的兩個(gè)頂點(diǎn)的編號(hào):",k);</p><p> scanf("%d,%d",&i,&j);</p><p
137、> g.a[k-1]=i;g.b[k-1]=j;</p><p> while (i<1||i>g.vexnum||j<1||j>g.vexnum)</p><p> {printf(" 編號(hào)超出范圍,重新輸入");//goto label;</p><p><b> }</b><
138、/p><p> if (g.kind==3||g.kind==4)</p><p> {printf("\t該邊的權(quán)值:");</p><p> scanf("%d",&h);</p><p> g.h[k-1]=h;</p><p><b> }<
139、/b></p><p> else g.h[k-1]=null;</p><p> adjl.adjs[i].id++;</p><p><b> }</b></p><p><b> }</b></p><p> switch(n){</p>
140、<p> case 1:UDG();break;</p><p> case 2:DG();break;</p><p> case 3:UDN();break;</p><p> case 4:DN();break;</p><p> case 5:break;</p><p> default
141、:printf("ERROR!");break;</p><p><b> }</b></p><p> }while(n!=5);</p><p><b> }</b></p><p><b> 測試</b></p><p>
142、; 程序開始運(yùn)行,進(jìn)入選擇界面</p><p> 選擇無向圖,并創(chuàng)建無向圖</p><p> C)基于已創(chuàng)建的的無向圖選擇各項(xiàng)具體的操作</p><p><b> 難點(diǎn)與收獲</b></p><p> 這次的實(shí)習(xí)報(bào)告相對(duì)我而言算是比較難的,因?yàn)樵趯W(xué)這門課程的時(shí)候就沒怎么專心聽講,所以在拿到計(jì)劃書的時(shí)候,對(duì)很多地
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用(算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)報(bào)告
- 算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 算法與數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)與算法分析課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)題目
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---prim算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)--騎士游歷
- 數(shù)據(jù)結(jié)構(gòu)與算法----迷宮求解課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)與算法分析課程設(shè)計(jì)報(bào)告
- 拓?fù)渑判?算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---數(shù)據(jù)結(jié)構(gòu)相關(guān)算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)
評(píng)論
0/150
提交評(píng)論