圖遍歷(深度搜索與廣度搜索和生成樹邊集)
阿新 • • 發佈:2019-02-20
}
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;
}
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;
}