圖的鄰接矩陣儲存及遍歷
阿新 • • 發佈:2018-12-17
這裡採用圖的鄰接矩陣儲存(即為二維陣列)
遍歷:DFS和BFS
#include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; const int MAX=100; typedef struct{ char vexs[MAX]; //儲存頂點 int arcs[MAX][MAX]; //儲存邊之間的路徑 int vexnum,arcnum; //頂點數目 }Graph; Graph G; bool flag[MAX]; void createG()//圖的鄰接矩陣儲存 { memset(G.arcs,0,sizeof(G.arcs)); cin>>G.vexnum>>G.arcnum; int a,b; for(int i=1;i<=G.arcnum;i++){ cin>>a>>b; G.arcs[a][b]=G.arcs[b][a]=1; } } void DFS(int v) //深度優先遍歷 { flag[v]=1; cout<<v<<" "; for(int i=1;i<=G.vexnum;i++){ if(G.arcs[v][i]&&!flag[i]) //該點和其他點之間有連線且未曾被遍歷 DFS(i); } } void BFS(int v) { memset(flag,0,sizeof(flag)); flag[v]=1; cout<<v<<" "; queue<int> q; q.push(v); while(!q.empty()){//判空也可用q.size() int w=q.front(); q.pop(); for(int i=1;i<=G.vexnum;i++){ if(G.arcs[w][i]&&!flag[i]){ q.push(i); cout<<i<<" "; flag[i]=1; } } } } int main() { //freopen("in.txt","r",stdin); createG(); cout<<"DFS: "<<endl; DFS(1); cout<<endl<<"BFS"<<endl; BFS(1); }