版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》報(bào)告題目旅游區(qū)導(dǎo)游圖專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)(2)班學(xué)生###13旅游區(qū)導(dǎo)游圖題目?jī)?nèi)容問題描述:設(shè)某個(gè)旅游區(qū)共有n個(gè)旅游景點(diǎn)(n≥10),每個(gè)旅游景點(diǎn)都和相鄰的m個(gè)旅游景點(diǎn)(m≥2,m<n)有直接的道路(有對(duì)應(yīng)的距離)相通,請(qǐng)?jiān)O(shè)計(jì)一個(gè)簡(jiǎn)易的旅游區(qū)導(dǎo)游系統(tǒng)。以(Vi,Vj,d)的形式從鍵盤輸入建立該旅游區(qū)的旅游景點(diǎn)圖,其中:Vi和Vj表示兩個(gè)不同的旅游景點(diǎn),d表示這兩個(gè)景點(diǎn)之間的道路距離;該旅游景點(diǎn)圖采用鄰接矩陣存儲(chǔ)結(jié)構(gòu)(數(shù)組)。實(shí)現(xiàn)要求:⑴旅游景點(diǎn)圖的輸出:分別以鄰接矩陣、鄰接鏈表的方式輸出該旅游景點(diǎn)圖。⑵相鄰景點(diǎn)查詢:假設(shè)對(duì)于每個(gè)景點(diǎn),設(shè)置有簡(jiǎn)易的信息查詢,要求能給出與該景點(diǎn)相鄰的所有景點(diǎn)(有直接的道路相通)及對(duì)應(yīng)的距離。⑶景點(diǎn)路線查詢:假設(shè)對(duì)于每個(gè)景點(diǎn),設(shè)置有景點(diǎn)路線查詢,要求能給出從該景點(diǎn)出發(fā)到任一其它景點(diǎn)的最短簡(jiǎn)單路徑及距離。⑷景點(diǎn)路線綜合查詢:對(duì)于該旅游區(qū)的任意兩個(gè)景點(diǎn),找出它們之間的最短簡(jiǎn)單路徑及距離。⑸最佳旅游路線確定:假設(shè)該旅游區(qū)的入口也是出口,請(qǐng)確定一條最佳的旅游線路,該線路必須經(jīng)過所有的旅游景點(diǎn)(有些景點(diǎn)可以重復(fù)經(jīng)過)且走的路最短。⑹設(shè)計(jì)一個(gè)菜單,上述操作要求都作為菜單中的主要菜單項(xiàng)。本人完成的工作完成的工作:首先是用鄰接矩陣的存儲(chǔ)形式建立無向帶權(quán)圖,然后將鄰接矩陣轉(zhuǎn)換為鄰接鏈表,最后用狄克斯特拉函數(shù)求出后面的三道有關(guān)最短路徑的小題,設(shè)計(jì)主函數(shù)。所采用的數(shù)據(jù)結(jié)構(gòu)鄰接矩陣的數(shù)據(jù)結(jié)構(gòu),包括(弧/邊的結(jié)構(gòu)定義、圖的結(jié)構(gòu)定義)鄰接鏈表的數(shù)據(jù)結(jié)構(gòu),包括(弧/邊的結(jié)點(diǎn)定義、鄰接表頭結(jié)點(diǎn)定義、圖的結(jié)構(gòu)定義)數(shù)據(jù)結(jié)構(gòu)的定義//鄰接矩陣結(jié)構(gòu)體typedefstruct{ charvex1,vex2;/*弧或邊所依附的兩個(gè)頂點(diǎn)*/intArcVal;/*弧或邊的權(quán)值*/}ArcType;/*弧或邊的結(jié)構(gòu)定義*/typedefstruct{ intvexnum,arcnum;/*圖的當(dāng)前頂點(diǎn)數(shù)和弧數(shù)*/ charvexs[MAXVEX];/*頂點(diǎn)向量*/ intadj[MAXVEX][MAXVEX];}MGraph;/*圖的結(jié)構(gòu)定義*///鄰接鏈表結(jié)構(gòu)體typedefstructANode//弧的結(jié)點(diǎn)結(jié)構(gòu)類型{intadjvex;//該弧的終點(diǎn)位置intinfo;//該弧的相關(guān)信息,這里用于存放權(quán)值structANode*nextarc;//指向下一條弧的指針}ArcNode;typedefstructVnode//鄰接表頭結(jié)點(diǎn)的類型{ chardata;//頂點(diǎn)信息ArcNode*firstarc;//指向第一條弧}VNode;typedefstruct{VNodeAdjList[MAXVEX];intvexnum,arcnum;//圖中頂點(diǎn)數(shù)n和邊數(shù)e}ALGraph;//圖的鄰接表類型所設(shè)計(jì)的函數(shù)對(duì)于每個(gè)主要函數(shù)必須給出所采用的算法思想和程序框圖;鄰接矩陣和鄰接鏈表初始化函數(shù)MGraph*Init_MGraph()/*圖的初始化*/{ MGraph*G; G=(MGraph*)malloc(sizeof(MGraph)); G->vexnum=0;G->arcnum=0;/*初始化頂點(diǎn)數(shù)、邊數(shù)*/ return(G);}ALGraph*Init_ALGraph()/*圖的初始化*/{ ALGraph*G; G=(ALGraph*)malloc(sizeof(ALGraph)); G->vexnum=0; G->arcnum=0;/*初始化頂點(diǎn)數(shù)*/ return(G);}圖中頂點(diǎn)定位的函數(shù),判斷頂點(diǎn)是否重復(fù)輸入了intLocateVex(MGraph*G,charvp)/*圖中頂點(diǎn)的定位,若圖中有頂點(diǎn)vp,返回其在頂點(diǎn)數(shù)組的下標(biāo)值*/{ intk; for(k=0;k<=G->vexnum;k++) if(G->vexs[k]==vp)return(k);開始k=0開始k=0返回-1k<=頂點(diǎn)總數(shù)?G->vexs[k]==vp?返回k結(jié)束k++}NNYY往圖中增加頂點(diǎn)的函數(shù)voidAddVertex(MGraph*G,charvp)/*往圖的頂點(diǎn)數(shù)組中增加頂點(diǎn)*/{ intk,j; if(G->vexnum>=MAXVEX) printf("圖中頂點(diǎn)數(shù)已達(dá)到最多!\n"); else { if(LocateVex(G,vp)==-1) { k=G->vexnum;G->vexs[G->vexnum++]=vp; for(j=0;j<G->vexnum;j++) { G->adj[j][k]=INFINITY; G->adj[k][j]=INFINITY; /*是帶權(quán)的有向圖或無向圖*/開始把這個(gè)點(diǎn)跟其他所有點(diǎn)建立關(guān)系,為開始把這個(gè)點(diǎn)跟其他所有點(diǎn)建立關(guān)系,為INFINITY,表示不存在連通關(guān)系新增加一個(gè)頂點(diǎn)給k賦值=頂點(diǎn)總數(shù)調(diào)用函數(shù)LocateVex,判斷頂點(diǎn)是否有重復(fù)判斷頂點(diǎn)數(shù)目是否已經(jīng)超過最大值結(jié)束 } }}NYNY往圖的鄰接矩陣中添加邊(弧)voidAddArc(MGraph*G,ArcType*arc)/*往圖的鄰接矩陣中添加邊(弧)*/{ intk=0,j=0; k=LocateVex(G,arc->vex1); j=LocateVex(G,arc->vex2); if(k==-1||j==-1) printf("邊或弧的頂點(diǎn)不存在,錯(cuò)誤!\n"); else { G->arcnum++; G->adj[k][j]=arc->ArcVal; G->adj[j][k]=arc->ArcVal; /*是無向圖或帶權(quán)的無向圖,需對(duì)稱賦值*/開始給兩個(gè)頂點(diǎn)之間加上權(quán)值開始給兩個(gè)頂點(diǎn)之間加上權(quán)值邊數(shù)加一判斷弧所依托的兩個(gè)頂點(diǎn)是否存在結(jié)束 }輸出圖的頂點(diǎn)矩陣和鄰接矩陣voidoutput_graphic(MGraph*G)/*輸出圖的頂點(diǎn)矩陣和鄰接矩陣*/{ intk,j;printf("圖的頂點(diǎn)如下:\n");for(k=0;k<G->vexnum;k++)printf("%4c",G->vexs[k]);printf("\n\n");printf("圖的鄰接矩陣如下:\n");for(k=0;k<G->vexnum;k++){ for(j=0;j<G->vexnum;j++)輸出**判斷兩個(gè)頂點(diǎn)之間是否存在連通輸出**判斷兩個(gè)頂點(diǎn)之間是否存在連通j++輸出權(quán)值開始結(jié)束j=0k=0k++k=0輸出第k個(gè)頂點(diǎn)判斷j是否小于頂點(diǎn)總數(shù)判斷k是否小于頂點(diǎn)總數(shù)判斷k是否小于頂點(diǎn)總數(shù)k++printf("%4s","**");elseprintf("%4d",G->adj[k][j]);printf("\n\n");} }YNYNY以鄰接矩陣作為圖的存儲(chǔ)結(jié)構(gòu)建立圖MGraph*create_graph()/*以鄰接矩陣作為圖的存儲(chǔ)結(jié)構(gòu)建立圖*/{ charinchar[100],enchar[100],fvex,lvex;intcount=0;intweight;MGraph*G;ArcType*arc;printf("首先進(jìn)行圖的初始化!!\n\n");G=(MGraph*)malloc(sizeof(MGraph));G=Init_MGraph();arc=(ArcType*)malloc(sizeof(ArcType)); printf("\n請(qǐng)以(頂點(diǎn),頂點(diǎn),權(quán)值)的形式輸入圖的邊(或弧),第一個(gè)頂點(diǎn)是?表示結(jié)束:\n"); while(1) { scanf("%s",inchar);fvex=inchar[0];/*輸入第一個(gè)頂點(diǎn),?結(jié)束*/ if(fvex=='?')break; else { AddVertex(G,fvex); scanf("%s",enchar);lvex=enchar[0];AddVertex(G,lvex); scanf("%d",&weight);/*輸入第二個(gè)頂點(diǎn)和權(quán)值*/ arc->vex1=fvex;arc->vex2=lvex; arc->ArcVal=weight;AddArc(G,arc); printf("\n請(qǐng)繼續(xù)輸入下一條邊(或弧)!!\n"); } }return(G);}將鄰接矩陣g轉(zhuǎn)換成鄰接表GALGraph*MGraphToALGraph(MGraph*g,ALGraph*G){ inti,j,n=g->vexnum;//n為頂點(diǎn)數(shù) ArcNode*p; G=(ALGraph*)malloc(sizeof(ALGraph)); G->arcnum=g->arcnum; G->vexnum=g->vexnum; for(i=0;i<G->vexnum;i++) G->AdjList[i].firstarc=NULL; for(i=0;i<n;i++)//檢查鄰接矩陣中每個(gè)元素 { for(j=n-1;j>=0;j--) if(g->adj[i][j]!=INFINITY)//鄰接矩陣的當(dāng)前元素不為 { p=(ArcNode*)malloc(sizeof(ArcNode));//創(chuàng)建一個(gè)結(jié)點(diǎn)*p G->AdjList[j].data=g->vexs[j]; p->adjvex=g->vexs[j]; p->info=g->adj[i][j]; p->nextarc=G->AdjList[i].firstarc;//將*p鏈到鏈表后G->AdjList[i].firstarc=p; } } returnG;}j--j--給鄰接點(diǎn)賦上鄰接矩陣對(duì)應(yīng)的頂點(diǎn)i++判斷兩頂點(diǎn)之間是否有連通頭結(jié)點(diǎn)數(shù)組指針指向相連通的鄰接點(diǎn)給鄰接邊賦上權(quán)值結(jié)束開始返回鄰接表G把鄰接矩陣的頂點(diǎn)總數(shù)賦值給鄰接鏈表的頂點(diǎn)總數(shù)把鄰接矩陣的邊總數(shù)賦值給鄰接鏈表的邊總數(shù)把頂點(diǎn)總數(shù)賦值給nj=n-1i=0用循環(huán)結(jié)構(gòu)把每一個(gè)頂點(diǎn)的頭指針初始化j>=0?i<n?鄰接鏈表的輸出voidoutput_graphic_c(MGraph*g,ALGraph*G){ inti; ArcNode*p; for(i=0;i<g->vexnum;i++) { printf("%c",G->AdjList[i].data); p=G->AdjList[i].firstarc; while(p!=NULL) { printf("%s","->"); printf("(%c,%d)",p->adjvex,p->info); p=p->nextarc; } printf("\n\n"); }}相鄰景點(diǎn)查詢并輸出voidoutput_Find_ALGraph(ALGraph*G){/*相鄰景點(diǎn)查詢并輸出*/ intj; ArcNode*p; printf("請(qǐng)輸入你要查詢的景點(diǎn)(下標(biāo)值):\n"); scanf("%d",&j); p=G->AdjList[j].firstarc; while(p) { printf("景點(diǎn)%c到景點(diǎn)%c的距離是%d(該兩個(gè)景點(diǎn)之間有直接的道路相通)\n",G->AdjList[j].data,p->adjvex,p->info); p=p->nextarc;開始結(jié)束開始結(jié)束輸出兩個(gè)頂點(diǎn)之間的距離把該景點(diǎn)在數(shù)組中的鄰接邊的頭指針賦值給p輸入景點(diǎn)對(duì)應(yīng)的下標(biāo)值判斷鄰接邊單鏈表的結(jié)點(diǎn)指針是否為空p指向下一個(gè)結(jié)點(diǎn)指針 printf("\n\n");}景點(diǎn)路線查詢:假設(shè)對(duì)于每個(gè)景點(diǎn),設(shè)置有景點(diǎn)路線查詢,要求能給出從該景點(diǎn)出發(fā)到任一其它景點(diǎn)的最短簡(jiǎn)單路徑及距離。voidDijkstra_One(ALGraph*G,MGraph*g,intv0,intdistance[],intpre[]){//帶權(quán)圖G從頂點(diǎn)v0到其他定點(diǎn)的最短距離distance和最短路徑前驅(qū)結(jié)點(diǎn)的下標(biāo)pre intw; intS[30],i,j,k,p,min; printf("你所要開始查詢的景點(diǎn)是:%c\n",G->AdjList[v0].data); for(i=0;i<g->vexnum;i++) { distance[i]=g->adj[v0][i]; S[i]=0; if(distance[i]<INFINITY) pre[i]=v0; else pre[i]=-1; } S[v0]=1;//頂點(diǎn)v0已加入到集合S中 for(i=0;i<g->vexnum;i++) { min=INFINITY; for(j=0;j<g->vexnum;j++) { if(!S[j]&&distance[j]<min) { min=distance[j]; k=j; } } S[k]=1;///將找到的頂點(diǎn)加入到集合S中 for(w=0;w<g->vexnum;w++)///修改集合T中頂點(diǎn)的距離值 if(!S[w]&&distance[w]>distance[k]+g->adj[k][w]) { distance[w]=distance[k]+g->adj[k][w]; pre[w]=k; } } printf("查詢結(jié)果:\n"); for(j=0;j<g->vexnum;j++)//輸出結(jié)果 if(pre[j]!=-1) { printf("從景點(diǎn)%c到景點(diǎn)%c",G->AdjList[v0].data,g->vexs[j]); p=pre[j]; printf("的最短距離是:%d",distance[j]); printf("途中經(jīng)過的景點(diǎn)有:"); while(p!=-1) { printf("%c",g->vexs[p]); p=pre[p]; } printf("\n"); } elseif(j!=v0) printf("\n%c到%c:nopath",g->vexs[j],g->vexs[v0]);開始用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)各數(shù)組的初始化開始用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)各數(shù)組的初始化輸入要查詢景點(diǎn)的下標(biāo)值定義最短路徑的終點(diǎn)集數(shù)組S置S={v0}求出當(dāng)前最小的dist[j]值w=0將第j個(gè)頂點(diǎn)放入S中結(jié)束結(jié)束從v0到w的最短路徑中,w的前一個(gè)頂點(diǎn)是k判斷w是否小于頂點(diǎn)總數(shù)從V0出發(fā)中間只經(jīng)過集合S中的頂點(diǎn)而到達(dá)Vw的所有路徑中長(zhǎng)度最小的路徑長(zhǎng)度distance[w]是否大于distance[w]+邊adj[k][w]的值從V0出發(fā)到w的最短距離distance[w]=從V0出發(fā)到w的最短距離distance[k]+邊adj[k][w]的權(quán)值w++查詢結(jié)果輸出NY景點(diǎn)路線綜合查詢:對(duì)于該旅游區(qū)的任意兩個(gè)景點(diǎn),找出它們之間的最短簡(jiǎn)單路徑及距離。voidDijkstra_Two(ALGraph*G,MGraph*g,intv0,intdistance[],intpre[]){ //帶權(quán)圖G從頂點(diǎn)v0到其他定點(diǎn)的最短距離distance和最短路徑前驅(qū)結(jié)點(diǎn)的下標(biāo)pre intw; intS[30],i,j,k,p,min,d; printf("你所要開始查詢的開始景點(diǎn)是:%c\n\n",G->AdjList[v0].data); for(i=0;i<g->vexnum;i++) { distance[i]=g->adj[v0][i]; S[i]=0; if(distance[i]<INFINITY) pre[i]=v0; else pre[i]=-1; } S[v0]=1;//頂點(diǎn)v0已加入到集合S中 for(i=0;i<g->vexnum;i++) { min=INFINITY; for(j=0;j<g->vexnum;j++) { if(!S[j]&&distance[j]<min) { min=distance[j]; k=j; } } S[k]=1;///將找到的頂點(diǎn)加入到集合S中 for(w=0;w<g->vexnum;w++)///修改集合T中頂點(diǎn)的距離值 if(!S[w]&&distance[w]>distance[k]+g->adj[k][w]) { distance[w]=distance[k]+g->adj[k][w]; pre[w]=k; } } printf("輸入你要查詢的另外一個(gè)景點(diǎn)(下標(biāo)值):"); scanf("%d",&d); printf("你要查詢的另外一個(gè)景點(diǎn)是:%c\n",g->vexs[d]); printf("\n查詢結(jié)果:\n");//輸出結(jié)果 if(pre[d]!=-1) { printf("從景點(diǎn)%c到景點(diǎn)%c",G->AdjList[v0].data,g->vexs[d]); p=pre[d]; printf("的最短距離是:%d",distance[d]); printf("途中經(jīng)過的景點(diǎn)有:"); while(p!=-1) { printf("%c",g->vexs[p]); p=pre[p]; }開始用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)各數(shù)組的初始化開始用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)各數(shù)組的初始化輸入要查詢景點(diǎn)的下標(biāo)值定義最短路徑的終點(diǎn)集數(shù)組S置S={v0} }}求出當(dāng)前最小的dist[j]值求出當(dāng)前最小的dist[j]值w=0將第j個(gè)頂點(diǎn)放入S中結(jié)束從v0到w的最短路徑中,w的前一個(gè)頂點(diǎn)是k判斷w是否小于頂點(diǎn)總數(shù)從V0出發(fā)中間只經(jīng)過集合S中的頂點(diǎn)而到達(dá)Vw的所有路徑中長(zhǎng)度最小的路徑長(zhǎng)度distance[w]是否大于distance[w]+邊adj[k][w]的值從V0出發(fā)到w的最短距離distance[w]=從V0出發(fā)到w的最短距離distance[k]+邊adj[k][w]的權(quán)值w++輸入要查詢另外一景點(diǎn)的下標(biāo)值查詢結(jié)果輸出最佳旅游路線確定:假設(shè)該旅游區(qū)的入口也是出口,請(qǐng)確定一條最佳的旅游線路,該線路必須經(jīng)過所有的旅游景點(diǎn)(有些景點(diǎn)可以重復(fù)經(jīng)過)且走的路最短。voiddfs_path(ALGraph*g,intsrc,intcur,intvis[],GPath*cur_path,GPath*min_path){ if(vis[src]) { if(cur_path->count==g->vexnum) { if(cur_path->value<min_path->value) { memcpy(min_path,cur_path,sizeof(GPath));/*由cur_path所指內(nèi)存區(qū)域復(fù)制sizeof(GPath)個(gè)字節(jié)到min_path所指內(nèi)存區(qū)域*/ return; } } return; } ArcNode*node=g->AdjList[cur].firstarc; for(;node!=NULL;node=node->nextarc)/*起始條件為node=g->AdjList[cur].firstarc*/ { charadj=node->adjvex; intindex=LocateVex(g,adj); if(vis[index]==0) { cur_path->vertex[cur_path->count++]=index; cur_path->value+=node->info; vis[index]=1; dfs_path(g,src,index,vis,cur_path,min_path); cur_path->count--; cur_path->value-=node->info;結(jié)束判斷vp是否存在結(jié)束判斷vp是否存在弧頭頂點(diǎn)數(shù)據(jù)元素=LocateVexx(g,adj)最小生成樹權(quán)值加遞歸開始把頂點(diǎn)的值vp復(fù)制給adj把鄰接表數(shù)組的頭指針賦值給node用循環(huán)結(jié)構(gòu)復(fù)制cur_pat的內(nèi)存到min_path判斷鄰接表指針是否為空node指向下一個(gè)結(jié)點(diǎn) } }}YNNYvoidbest_path(ALGraph*g,intsrc){ intvis[MAXVEX]; memset(vis,0,sizeof(vis)); GPathcur_path,min_path; memset(&cur_path,0,sizeof(GPath));/*將cur_path所指向的某一塊內(nèi)存中的每個(gè)字節(jié)的內(nèi)容全部設(shè)置為0指定的ASCII值, 塊的大小由第三個(gè)參數(shù)指定,這個(gè)函數(shù)通常為新申請(qǐng)的內(nèi)存做初始化工作,其返回值為指向cur_path的指針。*/ memset(&min_path,0,sizeof(GPath));/*將min_path所指向的某一塊內(nèi)存中的每個(gè)字節(jié)的內(nèi)容全部設(shè)置為0指定的ASCII值, 塊的大小由第三個(gè)參數(shù)指定,這個(gè)函數(shù)通常為新申請(qǐng)的內(nèi)存做初始化工作,其返回值為指向min_path的指針。*/ min_path.value=INFINITY; dfs_path(g,src,src,vis,&cur_path,&min_path); if(min_path.value!=INFINITY) { inti=0; printf("\n最佳旅游路線景點(diǎn)下標(biāo)值是:\n"); for(i=0;i<min_path.count;i++) { printf("%d->",min_path.vertex[i]); } printf("\n"); printf("\n最佳旅游路線景點(diǎn)是:\n"); for(i=0;i<min_path.count;i++) { printf("%c->",g->AdjList[min_path.vertex[i]].data); } printf("\n"); }else { printf("建立的圖中沒有最佳路徑\n"); }}主函數(shù)voidmain(){ intn,opse,v0,i; intdistance[MAXVEX],pre[2*MAXVEX],path[MAXVEX]; ALGraph*G; MGraph*M; do {printf("\n\n請(qǐng)選擇對(duì)圖的操作要求:\n\n"); for(n=0;n<=30;n++) printf("*"); printf("\n*"); printf("1----建立圖的鄰接矩陣"); printf("2----圖的鄰接矩陣的輸出"); printf("*\n"); printf("\n*"); printf("3----圖的鄰接鏈表的輸出"); printf("4----相鄰景點(diǎn)查詢"); printf("*\n"); printf("\n*"); printf("5----從某點(diǎn)出發(fā)到另外所有點(diǎn)最短簡(jiǎn)單路徑及距離"); printf("*\n"); printf("\n*"); printf("6----兩個(gè)景點(diǎn)之間的最短距離(下標(biāo)值)"); printf("*\n"); printf("\n*"); printf("7----最佳路徑"); printf("8----退出"); printf("*\n"); for(n=0;n<=30;n++) printf("*"); printf("\n\n"); do {scanf("%d",&opse); }while(opse<1||opse>8); switch(opse) { case1: {M=(MGraph*)malloc(sizeof(MGraph)); M=create_graph(); printf("\n\n"); break; } case2: {printf("\n您所建立的圖是:\n"); output_graphic(M); break; } case3: {printf("圖G的鄰接矩陣轉(zhuǎn)換成鄰接表:\n"); G=MGraphToALGraph(M,G);output_graphic_c(M,G); break; } case4: { printf("\n相鄰景點(diǎn)是:\n"); output_Find_ALGraph(G); break; } case5: { printf("\n最短簡(jiǎn)單路徑及距離是:\n"); scanf("%d",&v0); Dijkstra_One(G,M,v0,distance,pre); break; } case6: { printf("兩個(gè)景點(diǎn)之間的最短距離(下標(biāo)值):"); scanf("%d",&v0); Dijkstra_Two(G,M,v0,distance,pre); break; } case7: { printf("最佳路徑(下標(biāo)值):"); Dijkstra(M,0,distance,path); printf("從結(jié)點(diǎn)%c到其他各結(jié)點(diǎn)的最短距離為:\n",M->vexs[0]); for(i=1;i<M->vexnum;i++) printf("到結(jié)點(diǎn)%c的最短距離為%d:\n",M->vexs[i],distance[i]); printf("從結(jié)點(diǎn)%c到其他各結(jié)點(diǎn)最短路徑的前一結(jié)點(diǎn)為:\n",M->vexs[0]); for(i=1;i<M->vexnum;i++) if(path[i]!=-1) printf("到結(jié)點(diǎn)%c的前一結(jié)點(diǎn)為%c:\n",M->vexs[i],M->vexs[path[i]]); break; } } }while(opse!=8);}開始開始請(qǐng)選擇對(duì)圖的操作要求n<=30?菜單輸出*n=0n++調(diào)用create_graph(),建立圖breakbreakbreak調(diào)用MGraphToALGraph(),把鄰接矩陣轉(zhuǎn)換為鄰接鏈表調(diào)用output_graphic()鄰接矩陣的輸出調(diào)用output_graphic_c()鄰接矩陣的輸出………………結(jié)束結(jié)束調(diào)用output_Find_ALGraph()輸出相鄰景點(diǎn)breakbreak調(diào)用dijkshort_Two()函數(shù),查找兩個(gè)景點(diǎn)間的最短距離調(diào)用dijkshort_One()函數(shù),查找最短簡(jiǎn)單路徑和距離breakbreak調(diào)用Dijkstra()函數(shù),查找最佳路徑每個(gè)題目都必須有運(yùn)行時(shí)的輸入數(shù)據(jù)(隨機(jī)產(chǎn)生的數(shù)據(jù)要求輸出顯示),運(yùn)行的輸出結(jié)果。建立鄰接矩陣:鄰接矩陣輸出:鄰接鏈表輸出:相鄰景點(diǎn)查詢:從某點(diǎn)出發(fā)到另外所有點(diǎn)最短簡(jiǎn)單路徑及距離:兩個(gè)景點(diǎn)之間的最短距離:最佳路徑:每個(gè)函數(shù)中應(yīng)給出盡可能詳細(xì)的中文注釋。(源程序-全)#include"stdio.h"#include"malloc.h"#include"string.h"#defineINFINITY32767/*最大值∞*//*根據(jù)圖的權(quán)值類型,分別定義為最大整數(shù)或?qū)崝?shù)*/#defineMAXVEX30/*最大頂點(diǎn)數(shù)目*///鄰接矩陣結(jié)構(gòu)體typedefstruct{ charvex1,vex2;/*弧或邊所依附的兩個(gè)頂點(diǎn)*/intArcVal;/*弧或邊的權(quán)值*/}ArcType;/*弧或邊的結(jié)構(gòu)定義*/typedefstruct{ intvexnum,arcnum;/*圖的當(dāng)前頂點(diǎn)數(shù)和弧數(shù)*/ charvexs[MAXVEX];/*頂點(diǎn)向量*/ intadj[MAXVEX][MAXVEX];}MGraph;/*圖的結(jié)構(gòu)定義*/typedefstructPath{ intvertex[MAXVEX]; intvalue; intcount;}GPath;//鄰接鏈表結(jié)構(gòu)體typedefstructANode{//弧的結(jié)點(diǎn)結(jié)構(gòu)類型 intadjvex;//鄰接點(diǎn)在頭結(jié)點(diǎn)數(shù)組中的位置(下標(biāo)) intinfo;//該弧的相關(guān)信息,這里用于存放權(quán)值 structANode*nextarc;//指向下一條弧的指針}ArcNode;typedefstructVnode//鄰接表頭結(jié)點(diǎn)的類型{ chardata;//頂點(diǎn)信息 ArcNode*firstarc;//指向第一條弧}VNode;typedefstruct{ VNodeAdjList[MAXVEX];//鄰接表數(shù)組 intvexnum,arcnum;//圖中頂點(diǎn)數(shù)n和邊數(shù)e}ALGraph;//圖的鄰接表類型MGraph*Init_MGraph()/*圖的初始化*/{ MGraph*G; G=(MGraph*)malloc(sizeof(MGraph)); G->vexnum=0;G->arcnum=0;/*初始化頂點(diǎn)數(shù)、邊數(shù)*/ return(G);}ALGraph*Init_ALGraph()/*圖的初始化*/{ ALGraph*G; G=(ALGraph*)malloc(sizeof(ALGraph)); G->vexnum=0; G->arcnum=0;/*初始化頂點(diǎn)數(shù)*/ return(G);}intLocateVex(MGraph*G,charvp)/*圖中頂點(diǎn)的定位,若圖中有頂點(diǎn)vp,返回其在頂點(diǎn)數(shù)組的下標(biāo)值*/{ intk; for(k=0;k<=G->vexnum;k++) if(G->vexs[k]==vp)return(k); return(-1);/*圖中無此頂點(diǎn)*/}intLocateVexx(ALGraph*G,charvp)/*圖的頂點(diǎn)定位(圖的頂點(diǎn)定位實(shí)際上是確定一個(gè)頂點(diǎn)在AdjList數(shù)組中的某個(gè)元素的data域內(nèi)容。)*/{ intk; for(k=0;k<G->vexnum;k++) if(G->AdjList[k].data==vp) return(k);/*如果存在此頂點(diǎn)返回頂點(diǎn)數(shù)組下標(biāo)值*/ return(-1);/*如果沒有則返回-1(圖中無此頂點(diǎn))*/}voidAddVertex(MGraph*G,charvp)/*往圖的頂點(diǎn)數(shù)組中增加頂點(diǎn)*/{ intk,j; if(G->vexnum>=MAXVEX) printf("圖中頂點(diǎn)數(shù)已達(dá)到最多!\n"); else { if(LocateVex(G,vp)==-1)// 圖中無此頂點(diǎn) { k=G->vexnum;G->vexs[G->vexnum++]=vp; for(j=0;j<G->vexnum;j++) { G->adj[j][k]=INFINITY; G->adj[k][j]=INFINITY; /*是帶權(quán)的有向圖或無向圖*/ } } }}voidAddArc(MGraph*G,ArcType*arc)/*往圖的鄰接矩陣中添加邊(弧)*/{ intk=0,j=0; k=LocateVex(G,arc->vex1); j=LocateVex(G,arc->vex2); { G->arcnum++; G->adj[k][j]=arc->ArcVal; G->adj[j][k]=arc->ArcVal; /*是無向圖或帶權(quán)的無向圖,需對(duì)稱賦值*/ } }voidoutput_graphic(MGraph*G)/*輸出圖的頂點(diǎn)矩陣和鄰接矩陣*/{ intk,j; printf("圖的頂點(diǎn)如下:\n"); for(k=0;k<G->vexnum;k++) printf("%4c",G->vexs[k]); printf("\n\n"); printf("圖的鄰接矩陣如下:\n"); for(k=0;k<G->vexnum;k++) { for(j=0;j<G->vexnum;j++) if(G->adj[k][j]==INFINITY) printf("%4s","**"); else printf("%4d",G->adj[k][j]); printf("\n\n"); } }MGraph*create_graph()/*以鄰接矩陣作為圖的存儲(chǔ)結(jié)構(gòu)建立圖*/{ charinchar[100],enchar[100],fvex,lvex; intcount=0; intweight; MGraph*G; ArcType*arc; printf("首先進(jìn)行圖的初始化!!\n\n"); G=(MGraph*)malloc(sizeof(MGraph)); G=Init_MGraph(); arc=(ArcType*)malloc(sizeof(ArcType)); printf("\n請(qǐng)以(頂點(diǎn),頂點(diǎn),權(quán)值)的形式輸入圖的邊(或弧),第一個(gè)頂點(diǎn)是?表示結(jié)束:\n"); while(1) { scanf("%s",inchar);fvex=inchar[0];/*輸入第一個(gè)頂點(diǎn),?結(jié)束*/ if(fvex=='?')break; else { AddVertex(G,fvex); scanf("%s",enchar);lvex=enchar[0];AddVertex(G,lvex);/*輸入第二個(gè)頂點(diǎn)和權(quán)值*/ scanf("%d",&weight); arc->vex1=fvex;arc->vex2=lvex; arc->ArcVal=weight;AddArc(G,arc); printf("\n請(qǐng)繼續(xù)輸入下一條邊(或弧)!!\n"); } } return(G);}//將鄰接矩陣g轉(zhuǎn)換成鄰接表GALGraph*MGraphToALGraph(MGraph*g,ALGraph*G){ inti,j,n=g->vexnum;//n為鄰接矩陣頂點(diǎn)總數(shù) ArcNode*p; G=(ALGraph*)malloc(sizeof(ALGraph)); G->arcnum=g->arcnum; G->vexnum=g->vexnum; for(i=0;i<G->vexnum;i++) G->AdjList[i].firstarc=NULL; for(i=0;i<n;i++)//檢查鄰接矩陣中每個(gè)元素 { for(j=n-1;j>=0;j--) if(g->adj[i][j]!=INFINITY)//鄰接矩陣的當(dāng)前元素不為 { p=(ArcNode*)malloc(sizeof(ArcNode));//創(chuàng)建一個(gè)結(jié)點(diǎn)*p G->AdjList[j].data=g->vexs[j];//頂點(diǎn)數(shù)據(jù)元素賦值 p->adjvex=g->vexs[j];//給鄰接點(diǎn)數(shù)組中的每一個(gè)頭結(jié)點(diǎn)賦值 p->info=g->adj[i][j]; //給鄰接鏈表賦上權(quán)值 p->nextarc=G->AdjList[i].firstarc;//將*p鏈到鏈表后 G->AdjList[i].firstarc=p;//將i轉(zhuǎn)變?yōu)猷徑颖頂?shù)組的頭結(jié)點(diǎn) } } returnG;}voidoutput_graphic_c(MGraph*g,ALGraph*G){ inti; ArcNode*p;//ArcNode弧的結(jié)點(diǎn)結(jié)構(gòu)類型 for(i=0;i<g->vexnum;i++) { printf("%c",G->AdjList[i].data);//輸出鄰接表數(shù)組的頭結(jié)點(diǎn)元素 p=G->AdjList[i].firstarc;//鄰接表的頭指針 while(p!=NULL) { printf("%s","->");//整個(gè)一條單鏈表輸出 printf("(%c,%d)",p->adjvex,p->info); p=p->nextarc; } printf("\n\n"); }}voidoutput_Find_ALGraph(ALGraph*G,charvp){/*相鄰景點(diǎn)查詢并輸出*/ intj; ArcNode*p; //printf("請(qǐng)輸入你要查詢的景點(diǎn):\n"); //scanf("%d",&j);//scanf("%c",&ch);j=LocateVexx(G,vp); p=G->AdjList[j].firstarc;//鄰接表的頭指針 while(p) { printf("景點(diǎn)%c到景點(diǎn)%c的距離是%d(該兩個(gè)景點(diǎn)之間有直接的道路相通)\n",G->AdjList[j].data,p->adjvex,p->info); p=p->nextarc;//指向下一個(gè)結(jié)點(diǎn)指針 } printf("\n\n");}voidDijkstra_One(ALGraph*G,MGraph*g,charv0,intdistance[],intpre[]){//S[]為已求得最短路徑的終點(diǎn)集 //帶權(quán)圖G從頂點(diǎn)v0到其他定點(diǎn)的最短距離distance和最短路徑前驅(qū)結(jié)點(diǎn)的下標(biāo)pre //數(shù)組pre[n]保存從Vs到其它頂點(diǎn)的最短路徑。若pre[i]=k,表示從Vs到Vi的最短路徑中,Vi的前一個(gè)頂點(diǎn)是Vk, intw,m; intS[30],i,j,k,p,min; m=LocateVexx(G,v0); //printf("你所要開始查詢的景點(diǎn)是:%c\n",G->AdjList[m].data); for(i=0;i<g->vexnum;i++)/*各數(shù)組的初始化*/ { distance[i]=g->adj[m][i]; S[i]=0; if(distance[i]<INFINITY) pre[i]=m; else pre[i]=-1; } S[m]=1;//頂點(diǎn)v0已加入到集合S中設(shè)置s={v0} for(i=0;i<g->vexnum;i++)//找不在S中的頂點(diǎn)vk { min=INFINITY; for(j=0;j<g->vexnum;j++) { if(!S[j]&&distance[j]<min) { min=distance[j]; k=j; /*求出當(dāng)前最小的distance[j]值*/ } } S[k]=1;//將找到的頂點(diǎn)j加入到集合S中 for(w=0;w<g->vexnum;w++)//修改集合s中頂點(diǎn)的距離值 if(!S[w]&&distance[w]>distance[k]+g->adj[k][w]) { distance[w]=distance[k]+g->adj[k][w]; pre[w]=k;//修改distance和pre數(shù)組的值 } } printf("查詢結(jié)果:\n");//找到最短路徑 for(j=0;j<g->vexnum;j++)//輸出結(jié)果 if(pre[j]!=-1) { printf("從景點(diǎn)%c到景點(diǎn)%c",G->AdjList[m].data,g->vexs[j]); p=pre[j]; printf("的最短距離是:%d",distance[j]); printf("途中經(jīng)過的景點(diǎn)有:"); while(p!=-1) { printf("%c",g->vexs[p]); p=pre[p]; } printf("\n"); } elseif(j!=m) printf("\n%c到%c:nopath",g->vexs[j],g->vexs[m]);}voidDijkstra_Two(ALGraph*G,MGraph*g,charv0,chard,intdistance[],intpre[]){ //帶權(quán)圖G從頂點(diǎn)v0到其他定點(diǎn)的最短距離distance和最短路徑前驅(qū)結(jié)點(diǎn)的下標(biāo)pre intw,m,n; intS[30],i,j,k,p,min; //chard; m=LocateVexx(G,v0); //printf("你所要開始查詢的開始景點(diǎn)是:%c\n\n",G->AdjList[v0].data); for(i=0;i<g->vexnum;i++)/*各數(shù)組的初始化*/ { distance[i]=g->adj[m][i]; S[i]=0; if(distance[i]<INFINITY) pre[i]=m; else pre[i]=-1; } S[m]=1;//頂點(diǎn)v0已加入到集合S中設(shè)置s={v0} for(i=0;i<g->vexnum;i++)//找不在S中的頂點(diǎn)vk { min=INFINITY; for(j=0;j<g->vexnum;j++) { if(!S[j]&&distance[j]<min) { min=distance[j]; k=j; } }/*求出當(dāng)前最小的distance[j]值*/ S[k]=1;//將找到的頂點(diǎn)加入到集合S中 for(w=0;w<g->vexnum;w++)//修改集合s中頂點(diǎn)的距離值 if(!S[w]&&distance[w]>distance[k]+g->adj[k][w]) { distance[w]=distance[k]+g->adj[k][w]; pre[w]=k; }//修改distance和pre數(shù)組的值 } //printf("輸入你要查詢的另外一個(gè)景點(diǎn)(下標(biāo)值):"); //scanf("%c",&d); n=LocateVexx(G,d); //printf("你要查詢的另外一個(gè)景點(diǎn)是:%c\n",g->vexs[n]); printf("\n查詢結(jié)果:\n");//輸出結(jié)果 if(pre[n]!=-1) { printf("從景點(diǎn)%c到景點(diǎn)%c",G->AdjList[m].data,g->vexs[n]); p=pre[n]; printf("的最短距離是:%d",distance[n]); printf("途中經(jīng)過的景點(diǎn)有:"); while(p!=-1) { printf("%c",g->vexs[p]); p=pre[p]; } printf("\n"); }}voiddfs_path(ALGraph*g,intsrc,intcur,intvis[],GPath*cur_path,GPath*min_path){ if(vis[src]) { if(cur_path->count==g->vexnum) { if(cur_path->value<min_path->value) { memcpy(min_path,cur_path,sizeof(GPath));/*由cur_path所指內(nèi)存區(qū)域復(fù)制sizeof(GPath)個(gè)字節(jié)到min_path所指內(nèi)存區(qū)域*/ return; } } return; } ArcNode*node=g->AdjList[cur].firstarc; for(;node!=NULL;node=node->nextarc)/*起始條件為node=g->AdjList[cur].firstarc*/ { charadj=node->adjvex; intindex=LocateVexx(g,adj); if(vis[index]==0) { cur_path->vertex[cur_path->count++]=index; cur_path->value+=node->info; vis[index]=1; dfs_path(g,src,index,vis,cur_path,min_path); cur_path->count--; cur_path->value-=node->info; vis[index]=0; } }}voidbest_path(ALGraph*g,intsrc){ intvis[MAXVEX]; memset(vis,0,sizeof(vis)); GPathcur_path,min_path; memset(&cur_path,0,sizeof(GPath));/*將cur_path所指向的某一塊內(nèi)存中的每個(gè)字節(jié)的內(nèi)容全部設(shè)置為0指定的ASCII值, 塊的大小由第三個(gè)參數(shù)指定,這個(gè)函數(shù)通常為新申請(qǐng)的內(nèi)存做初始化工作,其返回值為指向cur_path的指針。*/ memset(&min_path,0,sizeof(GPath));/*將min_path所指向的某一塊內(nèi)存中的每個(gè)字節(jié)的內(nèi)容全部設(shè)置為0指定的ASCII值, 塊的大小由第三個(gè)參數(shù)指定,這個(gè)函數(shù)通常為新申請(qǐng)的內(nèi)存做初始化工作,其返回值為指向min_path的指針。*/ min_path.value=INFINITY; dfs_path(g,src,src,vis,&cur_path,&min_path); if(min_path.value!=INFINITY) { inti=0; printf("\n最佳旅游路線景點(diǎn)下標(biāo)值是:\n"); for(i=0;i<min_path.count;i++) { printf("%d->",min_path.vertex[i]); } printf("\n"); printf("\n最佳旅游路線景點(diǎn)是:\n"); for(i=0;i<min_path.count;i++) { printf("%c->",g->AdjList[min_path.vertex[i]].data); } printf("\n"); }else { printf("建立的圖中沒有最佳路徑\n"); }}voidmain(){intm; intn,opse; charvp,v0,d,src; intdistance[MAXVEX],pre[2*MAXVEX]; ALGraph*G; MGraph*M; do {printf("\n\n請(qǐng)選擇對(duì)圖的操作要求:\n\n"); for(n=0;n<=5;n++) printf("*"); printf("\n*"); printf("1----建立圖的鄰接矩陣"); printf("2----圖的鄰接矩陣的輸出"); printf("*\n"); printf("\n*"); printf("3----圖的鄰接鏈表的輸出"); printf("4----相鄰景點(diǎn)查詢(下標(biāo)值)"); printf("*\n"); printf("\n*"); printf("5----從某點(diǎn)出發(fā)到另外所有點(diǎn)最短簡(jiǎn)單路徑及距離(下標(biāo)值)"); printf("*\n"); printf("\n*"); printf("6----兩個(gè)景點(diǎn)之間的最短距離(下標(biāo)值)"); printf("*\n"); printf("\n*"); printf("7----最佳路徑"); printf("8----退出"); printf("*\n"); for(n=0;n<=5;n++) printf("*"); printf("\n\n"); do {scanf("%d",&opse); }while(opse<1||opse>8); switch(opse) { case1: {M=(MGraph*)malloc(sizeof(MGraph)); M=create_graph(); printf("\n\n"); break; } case2: {printf("\n您所建立的圖是:\n"); output_graphic(M); break; } case3: {printf("圖G的鄰接矩陣轉(zhuǎn)換成鄰接表:\n"); G=MGraphToALGraph(M,G);output_graphic_c(M,G); break; } case4: { printf("\n請(qǐng)輸入你要查詢的景點(diǎn):\n"); scanf("%c",&vp); output_Find_ALGraph(G,vp); break; } case5: { printf("\n輸入一個(gè)頂點(diǎn)是:\n"); scanf("%c",&v0); Dijkstra_One(G,M,v0,distance,pre); break; } case6: { printf("你所要開始查詢的開始景點(diǎn)是:\n\n"); scanf("%c",&v0); printf("你要查詢的另外一個(gè)景點(diǎn)是:\n"); scanf("%c",&d); Dijkstra_Two(G,M,v0,d,distance,pre); break; } case7: { printf("輸入你要查詢的開始景點(diǎn):"); scanf("%c",&v0);m=LocateVexx(G,v0); best_path(G,m); break; } } }while(opse!=8);}問題與總結(jié)問題:1、第一次答辯的時(shí)候,老師要求景點(diǎn)名稱在后面也要輸入字符型,回來后,想了一下,用了一個(gè)簡(jiǎn)單的辦法,即調(diào)用LocateVexx函數(shù)返回我輸入景點(diǎn)所對(duì)應(yīng)的下標(biāo)值。這樣就避免了只能輸入下標(biāo)值帶來的不便了;2、沒有完全符合最后一題的意思完成該題,最后一小題題目要求是可以重復(fù)經(jīng)過某些點(diǎn),但是我的程序是每個(gè)點(diǎn)只經(jīng)過一次的最短回路(即所建的圖需是哈密頓圖才有回路,否則會(huì)輸出沒有最短路徑);為了解決這個(gè)問題,我在網(wǎng)上也看了很多的資料,比如:TSP問題(旅行商問題/貨郎擔(dān)問題)、蟻群算法、、模擬退火算法、KM算法、中國郵遞員算法等,其中發(fā)現(xiàn)經(jīng)典的旅行商問題(貨郎擔(dān)問題)并不符合題目最后一題的要求,下面是在網(wǎng)上截圖的資料:為了解決這個(gè)難題,雖然在網(wǎng)上找了很多的資料,努力了三天,但是還是沒有能力解決這個(gè)問題。總結(jié):將鄰接矩陣轉(zhuǎn)換為鄰接鏈表走了很多彎路、花了很長(zhǎng)的時(shí)間;還有就是引用一些書上的函數(shù)時(shí),要正確用函數(shù)對(duì)結(jié)構(gòu)體成員調(diào)用,不能照搬過來,得看一下結(jié)構(gòu)上的區(qū)別。
附錄資料:不需要的可以自行刪除鍋爐基礎(chǔ)施工措施(內(nèi)容)項(xiàng)目工程概況及工程量2.1工程概況xx集團(tuán)塔山2×600MW機(jī)組坑口電廠鍋爐房基礎(chǔ)縱向?yàn)镵1、K2、K3、K4、K5、K6六個(gè)基礎(chǔ)軸線,基礎(chǔ)底標(biāo)高為-5.5m,±0.000相當(dāng)于絕對(duì)標(biāo)高(黃海高程)1074.8m?;A(chǔ)設(shè)計(jì)為鋼筋混凝土獨(dú)立基礎(chǔ),承臺(tái)之間設(shè)連梁及剪力墻.其中CT-1基礎(chǔ)2個(gè),CT-2基礎(chǔ)3個(gè),CT-3基礎(chǔ)2個(gè),CT-4基礎(chǔ)8個(gè),CT-4a基礎(chǔ)7個(gè),CT-5基礎(chǔ)2個(gè),CT-5a基礎(chǔ)2個(gè),CT-5b基礎(chǔ)2個(gè),CT-6基礎(chǔ)2個(gè),CT-7基礎(chǔ)4個(gè),CT-8基礎(chǔ)2個(gè),CT-8a基礎(chǔ)1個(gè),CT-9基礎(chǔ)2個(gè),CT-10基礎(chǔ)2個(gè)?;A(chǔ)承臺(tái)上短柱最大斷面2.2×2.2M,短柱頂標(biāo)高為-0.6M.混凝土強(qiáng)度等級(jí):基礎(chǔ)、拉梁為C35(CT-6、8、8a為C40),短柱、剪力墻為C40。鍋爐基礎(chǔ)澆注時(shí)先澆注至—1.70m標(biāo)高,待地腳螺栓和固定支架安裝完畢后再澆至—0.60m標(biāo)高。2.2主要工程量鋼筋:Φ32101.4TΦ2866.2TΦ2526.2TΦ161.4TΦ148.9TΦ126.9Tφ1447Tφ1211.7Tφ1012.1Tφ85Tφ1648.3T砼:C401252m3C351372m33.作業(yè)準(zhǔn)備工作及條件3.1作業(yè)人力計(jì)劃木工60人鋼筋工30人砼工15人架子工40人測(cè)量工2人機(jī)械工2人電工1人電焊工3人技術(shù)員1人質(zhì)檢員1人施工員2人3.2材料準(zhǔn)備100×100方木10m350×100方木8m鋼管60T十字扣件12000個(gè)腳手板800塊鉛絲22#1250kg鋼模板2200m2鉛絲12#3.3機(jī)具準(zhǔn)備反鏟1輛自卸汽車5輛機(jī)動(dòng)翻斗車2輛手推翻斗車10輛臺(tái)鉆1臺(tái)對(duì)焊機(jī)1臺(tái)磨光機(jī)2臺(tái)振搗器6臺(tái)砂輪切割機(jī)1臺(tái)鋼筋運(yùn)輸拖板車1輛泵車2臺(tái)罐車3輛4.作業(yè)程序及作業(yè)方法4.1施工順序測(cè)量放線→土方開挖→墊層施工→人工破樁→放線→基礎(chǔ)承臺(tái)鋼筋綁扎→基礎(chǔ)承臺(tái)模板安裝→基礎(chǔ)承臺(tái)混凝土澆筑→短柱鋼筋綁扎→短柱模板安裝→短柱混凝土澆筑4.2主要施工方法4.2.1土方開挖本基坑采用反鏟作業(yè),自卸汽車運(yùn)土。放坡坡度為1:0.75,基底作業(yè)面寬度為1m,詳見附圖1。根據(jù)設(shè)計(jì)挖方圖,鍋爐間機(jī)械挖方控制深度為-5.6m,機(jī)械挖方控制深基底暫留土層為300厚人工挖土。坡道位置詳見附圖,坡道寬為7.0m。護(hù)欄距邊坡頂緣1.5m處,高度1050mm,立桿間距2000mm,中間加設(shè)一道橫桿,并刷紅白相間油漆條紋?;油谕僚蓪H诵奁拢笊希ㄏ拢┛诶€修直,邊坡順直平滑。挖方土料運(yùn)于指定堆土(或用土)場(chǎng)地,要求隨時(shí)集中并整形。為防止風(fēng)吹土揚(yáng),應(yīng)拍實(shí)或淋濕土堆表面。隨時(shí)抄平,控制挖方深度。及時(shí)放出底線,以免超挖或少挖。修坡時(shí)要借助靠尺掛線,做到坡面一致,邊線順直。4.2.2墊層施工土方開挖機(jī)械至-5.3m后將余下的0.3m人工挖除至-5.6m,基槽經(jīng)設(shè)計(jì)人員、監(jiān)理驗(yàn)收合格后用50×100方木支設(shè)模板,墊層砼表面抹平后用木抹子或棕刷拉毛。表面平整度的誤差不超過10mm。4.2.3樁頭施工墊層施工完畢后進(jìn)行破樁頭,嚴(yán)格控制樁頭標(biāo)高,保證伸入承臺(tái)100mm。剔除時(shí)應(yīng)注意保護(hù)好樁插入承臺(tái)內(nèi)的鋼筋,剔除方法為風(fēng)鎬或鑿子在樁側(cè)面剔槽,將箍筋割除,主筋彎出,混凝土鑿除,然后用機(jī)械運(yùn)走。4.2.4架子工程腳手架搭設(shè)地基應(yīng)平整夯實(shí),并加設(shè)50木板、掃地桿,滿鋪腳手板,并用12#鉛絲栓牢,不得有探頭板,頂部加設(shè)雙層防護(hù)欄桿。承臺(tái)施工搭設(shè)雙排操作架,腳手架立桿離基礎(chǔ)邊300mm左右,立桿縱向間距1.5m,水平間距1.5m,步距1.8m,小橫桿間距1.2m。外側(cè)加設(shè)剪刀撐和斜拉撐。剪刀撐不得大于45度。在承臺(tái)內(nèi)的立桿下加Φ32鋼筋支撐,頂部焊L=100mm鋼筋頭,高出混凝土面100mm。搭設(shè)方法見附圖2。4.2.5鋼筋工程鋼筋采用集中配制,現(xiàn)場(chǎng)綁扎,鋼筋接頭采用閃光對(duì)焊。綁扎鋼筋前先在墊層上彈出基礎(chǔ)軸線、柱邊線軸線、板墻及四角并用紅油漆標(biāo)明。在基礎(chǔ)邊線內(nèi)畫出底板鋼筋的位置,擺放并綁扎底板鋼筋。柱鋼筋、板墻和底板鋼筋綁扎在一起,在基礎(chǔ)頂部柱鋼筋用鋼管扣件框住并找準(zhǔn)位置綁扎在鋼管框上,鋼管框和模板加固鋼管連在一起,形成一個(gè)整體。鋼筋綁扎時(shí)先綁扎底板受力主筋,然后安裝模板支架(見模板工程),最后綁扎上部附加鋼筋。鋼筋保護(hù)層用1:2水泥砂漿制作,基礎(chǔ)底保護(hù)層100mm,側(cè)面及頂面為35mm,柱和拉梁保護(hù)層為35mm,剪力墻保護(hù)層為25mm。在墊塊上設(shè)置22#鉛絲綁扎在柱主筋上,呈梅花形綁扎@1000mm。4.2.6模板工程基礎(chǔ)及柱采用竹膠模板,模板加固基礎(chǔ)用鋼管圍檁和M12對(duì)拉螺栓桿加固@750×600.詳見附圖3。上層臺(tái)階懸空模板用Φ20鋼筋支架架設(shè),間距1.5m設(shè)置一道。在基礎(chǔ)四周打入鋼管地錨用鋼管斜撐加固,使整個(gè)基礎(chǔ)成為一個(gè)整體。模板支設(shè)必須涂刷隔離劑,拆模要按照先支后拆,先支后拆的順序進(jìn)行,由高到低自上而下拆,拆除時(shí)嚴(yán)禁猛撬、猛砸,破壞砼棱角和表面。4.2.7砼工程4.2.7.1混凝土由攪拌站集中供應(yīng),罐車運(yùn)送,泵車布料,混凝土攪拌時(shí)嚴(yán)格按試驗(yàn)室配合比進(jìn)行試配,計(jì)量器具必須經(jīng)過驗(yàn)定,計(jì)量要準(zhǔn)確.混凝土澆灌采用全面分層法,拉梁及板墻采用斜面分層法.混凝土澆注一次成型,施工縫留在承臺(tái)與短柱交接處.暫留K5軸CT-4a不施工,以便泵車進(jìn)入基坑內(nèi)澆注混凝土,待其他承臺(tái)施工完畢后最后施工此承臺(tái).混凝土振搗采
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度公共場(chǎng)所消防安全管理合同細(xì)則3篇
- 2025年度數(shù)控車床采購合同(含刀具智能檢測(cè)技術(shù))4篇
- 2025年度特殊人群客運(yùn)服務(wù)合同書-無障礙出行服務(wù)合作協(xié)議4篇
- 2025年度智慧醫(yī)療平臺(tái)建設(shè)出資擔(dān)保協(xié)議書4篇
- 2025年企業(yè)食堂承包及員工健康餐飲服務(wù)協(xié)議4篇
- 2024銷售人員提成獎(jiǎng)金分配勞動(dòng)合同3篇
- 2024蘋果期貨交易與風(fēng)險(xiǎn)管理合同3篇
- 2025年度抖音平臺(tái)虛擬商品交易安全保障協(xié)議3篇
- 2024蘋果種植基地建設(shè)與運(yùn)營(yíng)管理合同3篇
- 2024版國際貿(mào)易合同的標(biāo)的
- 第二章 運(yùn)營(yíng)管理戰(zhàn)略
- 《三本白皮書》全文內(nèi)容及應(yīng)知應(yīng)會(huì)知識(shí)點(diǎn)
- 專題14 思想方法專題:線段與角計(jì)算中的思想方法壓軸題四種模型全攻略(解析版)
- 醫(yī)院外來器械及植入物管理制度(4篇)
- 圖像識(shí)別領(lǐng)域自適應(yīng)技術(shù)-洞察分析
- 港口與港口工程概論
- 《念珠菌感染的治療》課件
- 個(gè)體戶店鋪?zhàn)赓U合同
- 門店裝修設(shè)計(jì)手冊(cè)
- 新概念英語第二冊(cè)考評(píng)試卷含答案(第49-56課)
- 商業(yè)倫理與企業(yè)社會(huì)責(zé)任(山東財(cái)經(jīng)大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年山東財(cái)經(jīng)大學(xué)
評(píng)論
0/150
提交評(píng)論