1. 程式人生 > >圖遍歷(深度搜索與廣度搜索和生成樹邊集)

圖遍歷(深度搜索與廣度搜索和生成樹邊集)

}
void DFS(AMLGraph G,int v);
void DFSTraverse(AMLGraph G ,char start){
int v,z;
for(v=0;v<G.vexnum;v++)Visited[v]=0;
    z=LocateVex(G,start);
for(v=0;v<G.vexnum;v++)
   if(Visited[(v+z)%G.vexnum]==0)
    DFS(G,(v+z)%G.vexnum);
}
void DFS(AMLGraph G,int v){
Visited[v]=1;
cout<<G.adjmulist[v].data<<endl;
char u;
u=G.adjmulist[v].data;
for(int w=FirstAdjvex(G,u);w>=0;w=NextAdjvex(G,u,G.adjmulist[w].data))
   if(Visited[w]==0){cout<<G.adjmulist[v].data<<"--"<<G.adjmulist[w].data<<endl;
   DFS(G,w);
   }
}
void BFSTraverse(AMLGraph G,char start){
Queue Q;
int u,z,w;
for(int v=0;v<G.vexnum;v++)Visited[v]=0;
InitQueue(Q);
z=LocateVex(G,start);
for(v=0;v<G.vexnum;v++)
   if(Visited[(v+z)%G.vexnum]==0){
    Visited[(v+z)%G.vexnum]=1;
      cout<<G.adjmulist[(v+z)%G.vexnum].data<<endl;
   
      EnQueue(Q,(v+z)%G.vexnum);
    while(!QueueEmpty(Q)){
     DeQueue(Q,u);
     for(w=FirstAdjvex(G,G.adjmulist[u].data);w>=0;w=NextAdjvex(G,G.adjmulist[u].data,
      G.adjmulist[w].data))
      if(Visited[w]==0){
       Visited[w]=1;
       cout<<G.adjmulist[u].data<<"--"<<G.adjmulist[w].data<<endl;
       cout<<G.adjmulist[w].data<<endl;
      
     
       EnQueue(Q,w);
      }
    }
   }
   DestroyQueue(Q);
}
int main(){
AMLGraph G;
char start;;
CreateGraph(G);
cout<<"輸入要開始搜尋的點:"<<endl;
cin>>start;
cout<<"深度優先搜尋:"<<endl;
DFSTraverse(G,start);
cout<<"廣度優先搜尋:"<<endl;
BFSTraverse(G,start);
return 0;
}