鄰接矩陣的深度以及廣度優先遍歷
阿新 • • 發佈:2018-12-21
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<queue> #define INF 0x3f3f3f3f using namespace std; typedef struct { char vexs[10]; int arry[10][10]; int vertexnum,arcnum; }MGraph; bool visited[10]; void makeMGraph(MGraph *G) { int i,j; cout<<"請輸入該圖的頂點數和邊數:"; cin>>G->vertexnum>>G->arcnum; cout<<"請依次輸入頂點元素:"<<endl; for(i=0;i<G->vertexnum;i++) { cin>>G->vexs[i]; } for(i=0;i<G->vertexnum;i++) for(j=0;j<G->vertexnum;j++) G->arry[i][j]=0; cout<<"請依次輸入邊的序號:"<<endl; for(int k=0;k<G->arcnum;k++) { cin>>i>>j; G->arry[i][j]=1; G->arry[j][i]=1; } } void DFSM(MGraph *G,int i) { int j; cout<<G->vexs[i]; visited[i]=1; for(j=0;j<G->vertexnum;j++) { if(G->arry[i][j]==1&&visited[j]==0) DFSM(G,j); } } void DFStravel(MGraph *G) { int i; for(i=0;i<G->vertexnum;i++) visited[i]=0; for(i=0;i<G->vertexnum;i++) { if(visited[i]==0) DFSM(G,i); } } void BFSM(MGraph *G,int i) { queue<int> q; cout<<G->vexs[i];visited[i]=1; q.push(i); while(!q.empty()) { q.pop(); for(int j=0;j<G->vertexnum;j++) if(G->arry[i][j]==1&&visited[j]==0) { cout<<G->vexs[j];visited[j]=1; q.push(j); } } } void BFSMtravel(MGraph *G) { int i; for(i=0;i<G->vertexnum;i++) visited[i]=0; for(i=0;i<G->vertexnum;i++) { if(visited[i]==0) BFSM(G,i); } } int main() { int i,j; MGraph *G; G=new MGraph; makeMGraph(G); cout<<"深度遍歷結果是:"; BFSMtravel(G); cout<<endl; cout<<"廣度遍歷結果是:"; DFStravel(G); return 0; }