資料結構——PTA 鄰接矩陣儲存圖的深度優先遍歷、鄰接表儲存圖的廣度優先遍歷
阿新 • • 發佈:2018-11-21
廣度優先與深度優先是遍歷圖的兩種基本方法,大致的思想是DFS為遞迴,而BFS是佇列。
這裡給出PTA兩道題目的答案,方法很基本,但第三個形參還是第一次見,去網上搜了搜給出的說法是呼叫函式的地址,但個人感覺就是呼叫這個函式。。。
下面給出兩段程式碼
void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) { Vertex p[MaxVertexNum*MaxVertexNum],f=0,r=0;//用來模擬佇列 PtrToAdjVNode t=NULL; p[r++]=S; Visit(S); Visited[S]=true; while(f!=r) { int nextpoint=p[f++]; t=Graph->G[nextpoint].FirstEdge; while(t!=NULL) { if( Visited[t->AdjV]!=true) { Visit(t->AdjV); Visited[t->AdjV]=true; p[r++]=t->AdjV; } t=t->Next; } } } void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ) { Visited[V]=true; Visit(V); for(int i=0;i<Graph->Nv;i++) { if(Graph->G[V][i]==1&&!Visited[i]) { DFS(Graph,i,Visit); } } }