數據結構第7章答案_第1頁
數據結構第7章答案_第2頁
數據結構第7章答案_第3頁
數據結構第7章答案_第4頁
數據結構第7章答案_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

答:11、設圖G=(V,E),V={1,2,3,4,5,6},E={〈1,2〉,〈1,3〉,〈2,5〉,〈3,6〉,〈6,5〉,〈5,4〉,〈6,4〉}。畫出圖G,并寫出圖G中頂點的所有拓撲序列。1,2,3,6,5,41,3,2,6,5,41,3,6,2,5,4五、代碼填空題01、圖的存儲結構定義如下:typedefstructArcCell{VRTypeadj;/*圖中有1/0表示是否有邊,網中表示邊上的權值*//*InfoType*info;與邊相關的信息*/}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedefstruct{VertexTypevexs[MAX_VERTEX_NUM];/*頂點向量*/AdjMatrixarcs;/*鄰接矩陣*/intvexnum,arcnum;/*圖中當前頂點數和邊數*/}MGraph;請寫出下面函數實現的功能:頂點在頂點向量中的定位。intLocateVex(MGraphG,VertexTypev){inti;for(i=0;i〈G.vexnum;i++)if(strcmp(v,G.vexs[i])==0)break;returni;}下面函數的功能是在圖中查找第1個鄰接點,請填空。intFirstAdjVex(MGraphG,intv){intj,p=-1;for(j=0;j〈G.vexnum;j++)if(G.arcs[v][j].adj==1){p=j;break;}returnp;下面函數的功能是在圖中查找下一個鄰接點,請填空。intNextAdjVex(MGraphG,intv,intw){intj,p=-1;for(j二w+1;j〈G.vexnum;j++)if(G.arcs[v][j].adj==l){p=j;break;}returnp;}02、已知圖的鄰接表表示的形式說明如下:#defineMaxNum80typedefstructnode{intadjvex;//鄰接點域structnode*next;//鏈指針域}EdgeNode;//邊表結點結構描述typedefstruct{charvertex;//頂點域EdgeNode*firstedge;//邊表頭指針}VertexNode;//頂點表結點結構描述typedefstruct{VertexNodeadjlist[MaxNum];//鄰接表intn,e;}AlGraph;//鄰接表結構描述下列算法輸出圖G的深度優先生成樹(或森林)的邊,閱讀算法,并在空缺處填入合適的內容,使其成為個完整的算法。typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxNum];voidDFSForest(AlGraph*G){for(i=0;i〈G-〉n;i++)visited[i]二FALSE;for(i=0;i〈G-〉n;i++)if(!visited[i])DFSTree(G,i);}voidDFSTree(AlGraph*G,inti){visited[i]=TRUE;p=G-〉adjlist[i].firstedge;while(p!=NULL){if(!visited[p-〉adjves]){printf(G-〉adjlist[i].vertex,G-〉adjlist[p-〉adjvex].vertex);DSFTree(G,p-〉adjvex);}p=p-〉next;}}六、算法設計題01、編寫編歷算法,完成對圖的深度優先搜索和廣度優先搜索。答:深度優先搜索:課本P169算法7.4和算法7.5廣度優先搜索:課本P170算法7.602、編寫算法,由依次輸入的頂點數目、弧的數目、各頂點的信息和各條弧的信息建立有向圖的鄰接表。答:StatusBuild_AdjList(ALGraph&G)//輸入有向圖的頂點數,邊數,頂點信息和邊的信息建立鄰接表{InitALGraph(G);scanf("%d",&v);if(v〈0)returnERROR;//頂點數不能為負G.vexnum=v;scanf("%d",&a);

if(a<0)returnERROR;//邊數不能為負G.arcnum=a;for(m=0;m<v;m++)G.vertices[m].data=getchar();//輸入各頂點的符號for(m=1;m<=a;m++){t=getchar();h=getchar();//t為弧尾,h為弧頭if((i=LocateVex(G,t))<0)returnERROR;if((j=LocateVex(G,h))<0)returnERROR;//頂點未找到p=(ArcNode*)malloc(sizeof(ArcNode));if(!G.vertices.[i].firstarc)G.vertices[i].firstarc=p;else{for(q=G.vertices[i].firstarc;q->nextarc;q=q->nextarc);q->nextarc=p;}p->adjvex=j;p->nextarc=NULL;}//whilereturnOK;}//Build_AdjList03、試在鄰接矩陣存儲結構上實現圖的基本操作:DeleteArc(G,v,w),即刪除一條邊的操作。提示:要刪除所有從第i個頂點出發的邊,即將鄰接矩陣的第i行全部置0。答://本題中的圖G均為有向無權圖。StatusDelete_Arc(MGraph&G,charv,charw)//在鄰接矩陣表示的圖G上刪除邊(v,w){if((i=LocateVex(G,v))<0)returnERROR;if((j=LocateVex(G,w))<0)returnERROR;if(G.arcs[i][j].adj){G.arcs[i][j].adj=0;G.arcnum--;}returnOK;}//Delete_Arc04、有n個頂點的有向圖的鄰接表定義如下04、有n個頂點的有向圖的鄰接表定義如下:#defineMaxNum80typedefstructArcNode{intadjvex;structArcNode*nextarc;}ArcNode;typedefstructVNode{VertexTypedata;ArcNode*firstedge;}VNode,AdjList[MaxNum];typedefstruct{AdjListvertices;intvexnum,arcnum;}AlGraph;設計算法分別實現以下要求求出圖G中每個頂點的出度;求出圖G中出度最大的一個頂點,計算圖G中出度為0的頂點數;//鄰接點域//鏈指針域//邊表結點結構描述//頂點域//邊表頭指針//頂點向量結點結構描述//鄰接表//鄰接表結構描述輸出該頂點號及其信息判斷圖G中是否存在弧〈i,j〉。答:本題答案見實驗部分05、試基于圖的深度優先搜索策略寫一算法,判別以鄰接表方式存儲的有向圖中是否存在由頂點v到頂點v的ij路徑(i^j)。注意:算法中涉及的圖的基本操作必須在此存儲結構上實現。答:intvisited[MAXSIZE];//指示頂點是否在當前路徑上intexist_path_DFS(ALGraphG,inti,intj)//深度優先判斷有向圖G中頂點i到頂點j是否有路徑,是則返回1,否則返回0{if(i==j)return1;//i就是jelse{visited[i]=1;for(p=G.vertices[i].firstarc;p;p=p-〉nextarc){k=p-〉adjvex;辻(!visited[k]&&exist_path(k,j))returnl;//i下游的頂點到j有路徑}//for}//else}//exist_path_DFS解2:(以上算法似乎有問題:如果不存在路徑,則原程序不能返回0。我的解決方式是在原程序的中引入一變量level來控制遞歸進行的層數。具體的方法我在程序中用紅色標記出來了。)intvisited[MAXSIZE];//指示頂點是否在當前路徑上intlevel=l;//遞歸進行的層數intexist_path_DFS(ALGraphG,inti,intj)//深度優先判斷有向圖G中頂點i到頂點j是否有路徑,是則返回1,否則返回0{if(i==j)return1;//i就是jelse{vis

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論