實驗六:圖的實驗
阿新 • • 發佈:2018-11-08
一、實驗目的
1、 熟練理解 圖的相關概念 ;
2、 掌握圖的鄰接矩陣儲存方法 的實現;
3、 學會圖的遍歷演算法
二、 實驗內容
1、自己確定 一個簡單無向圖(頂點數和 相關結點資訊 )利用 )利用 鄰接矩陣來實現儲存。構造,並完成:
1) 用深度優先和廣秀兩種演算法對圖進行遍歷,輸出 頂點序列 資料;
2) 以合理的格式,輸出各個頂點的鄰接;
2、試設計一個程式, 對一個有向簡單圖,完成上題同樣的任務(*)
源程式如下:
#include<iostream> using namespace std; const int MaxSize=10; template<class T> class MGraph { public: MGraph(T a[],int n,int e);//建構函式 ~MGraph(){}//解構函式 void DFSTraverse(int v);//深度優先 void BFSTraverse(int v);//廣度優先 private: T vertex[MaxSize];//頂點陣列 int arc[MaxSize][MaxSize];//邊的陣列 int vertexNum,arcNum,visited[MaxSize];//頂點數,邊數,已訪問陣列 }; template <class T> MGraph<T>::MGraph(T a[],int n,int e)//建構函式 { int i,j; vertexNum=n;arcNum=e; for(i=0;i<vertexNum;i++) vertex[i]=a[i]; for(i=0;i<vertexNum;i++) visited[i]=0; for(i=0;i<vertexNum;i++) for(j=0;j<vertexNum;j++) arc[i][j]=0; for(int k=0;k<arcNum;k++) { cin>>i>>j; arc[i][j]=1;arc[j][i]=1; } } template <class T> void MGraph<T>::DFSTraverse(int v)//深度優先遍歷 { cout<<vertex[v]; visited[v]=1; for(int j=0;j<vertexNum;j++) if(arc[v][j]==1&&visited[j]==0) DFSTraverse(j); } template <class T> void MGraph<T>::BFSTraverse(int v)//廣度優先遍歷 { for(int i=0;i<vertexNum;i++) visited[i]=0; int Q[MaxSize]; int front=-1,rear=-1; cout<<vertex[v]; visited[v]=1; Q[++rear]=v; while(front!=rear) { v=Q[++front]; for(int j=0;j<vertexNum;j++) if(arc[v][j]==1&&visited[j]==0) { cout<<vertex[j];visited[j]=1;Q[++rear]=j; } } } int main() { cout<<"輸入4個頂點資訊:"<<endl; char a[4]; for(int i=0;i<4;i++) cin>>a[i]; cout<<"輸入邊資訊"<<endl; MGraph<char> M(a,4,4); cout<<"深度遍歷為:"<<endl; M.DFSTraverse(0); cout<<endl; cout<<"廣度遍歷為:"<<endl; M.BFSTraverse(0); cout<<endl; return 0; }