一、实验目的
1、 熟练 理解 图的相关概念 ;
2、 掌握 图的邻接矩阵存储方法 的实现;
3、 学会 图的遍历算法
二、 实验内容
1、自己确定 一个 简单无向图(顶点数和 相关结点信息 )利用 )利用 邻接矩阵来实现 存储。构造,并完成:
1) 用深度优先和广秀两种算法对图进行遍历 ,输出 顶点序列 数据;
2) 以合理的格式,输出各个顶点的邻接;
1、 熟练 理解 图的相关概念 ;
2、 掌握 图的邻接矩阵存储方法 的实现;
3、 学会 图的遍历算法
二、 实验内容
1、自己确定 一个 简单无向图(顶点数和 相关结点信息 )利用 )利用 邻接矩阵来实现 存储。构造,并完成:
1) 用深度优先和广秀两种算法对图进行遍历 ,输出 顶点序列 数据;
2) 以合理的格式,输出各个顶点的邻接;
2、试设计一个程序, 对一个有向简单图,完成上题同样的任务 (*)
1、确定 的简单无向图为
#include <iostream> using namespace std; const int MaxSize=10; template <class DataType> class MGraph{ private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize],visited[MaxSize]; int vertexNum,arcNum; public: MGraph(DataType a[],int n,int e); ~MGraph(){} void DFSTraverse(int v); void BFSTraverse(int v); void Creatvisited(){ for(int i=0;i<vertexNum;i++) //初始化visited表 visited[i]=0;} }; template <class DataType> MGraph<DataType>::MGraph(DataType a[],int n,int e){ vertexNum=n;arcNum=e; for(int i=0;i<n;i++) vertex[i]=a[i]; for(int j=0;j<n;j++) for(i=0;i<n;i++) arc[j][i]=0; for(int k=0;k<e;k++){ cin>>i>>j; arc[i][j]=1; arc[j][i]=1; } } template <class DataType> void MGraph<DataType>::DFSTraverse(int v){ cout<<vertex[v]<<' ';visited[v]=1; for (int i=0;i<vertexNum;i++) if (arc[v][i]==1&&visited[i]==0) DFSTraverse(i); } template <class DataType> void MGraph<DataType>::BFSTraverse(int v){ int Q[MaxSize],front,rear; front=rear=-1; cout<<vertex[v]<<' ';visited[v]=1;Q[++rear]=v; while(front!=rear){ v=Q[++front]; for(int i=0;i<vertexNum;i++){ if (arc[v][i]==1&&visited[i]==0){ cout<<vertex[i]<<' ';visited[i]=1;Q[++rear]=i; } } } } int main(){ char a[4]; cout<<"请输入4个顶点的图的顶点信息:"<<endl; for(int i=0;i<4;i++) cin>>a[i]; cout<<"请输入边的信息"<<endl; MGraph<char> M(a,4,4); cout<<"深度优先遍历:"<<endl; M.Creatvisited(); M.DFSTraverse(0); M.Creatvisited(); cout<<endl; cout<<"广度优先遍历:"<<endl; M.BFSTraverse(0); cout<<endl; return 0;
结果截图为: