一、实验目的
1、熟练理解图的相关概念;
2、掌握图的邻接矩阵的存储方法的实现;
3、学会图的遍历算法
二、实验内容
1、自己确定一个简单无向图(顶点数、和相关结点信息)利用邻接矩阵来实现存储。实现
图的构造,并完成:
1)用深度优先和广度优秀两种算法对图进行遍历,输出顶点序列数据;
2)以合理的格式,输出各个顶点的邻接点;
2、试设计一个程序,对一个有向简单图,完成上题同样的任务(*)。
三、实验步骤
1、依据实验内容,先确定具体的图,并说明图的顶点数据类型;
2、设计具体的算法;
3、写出完整程序;
4、总结、运行结果和分析算法效率。
5、总体收获和不足,疑问等。
四、实验要求
1、按照数据结构实验任务书,提前做好实验预习与准备工作。
1、熟练理解图的相关概念;
2、掌握图的邻接矩阵的存储方法的实现;
3、学会图的遍历算法
二、实验内容
1、自己确定一个简单无向图(顶点数、和相关结点信息)利用邻接矩阵来实现存储。实现
图的构造,并完成:
1)用深度优先和广度优秀两种算法对图进行遍历,输出顶点序列数据;
2)以合理的格式,输出各个顶点的邻接点;
2、试设计一个程序,对一个有向简单图,完成上题同样的任务(*)。
三、实验步骤
1、依据实验内容,先确定具体的图,并说明图的顶点数据类型;
2、设计具体的算法;
3、写出完整程序;
4、总结、运行结果和分析算法效率。
5、总体收获和不足,疑问等。
四、实验要求
1、按照数据结构实验任务书,提前做好实验预习与准备工作。
2、在个人主页上发文章提交作业。
无向图
代码如下:
#ifndef mgraph_H #define mgraph_H const int Max=10; template<class datatype> class mgraph { public: mgraph(datatype a[],int n,int e); ~mgraph(){} void DFS(int v); void BFS(int v); void APP(); private: datatype vertex[Max]; int arc[Max][Max]; int vertexNUM,arcNUM; }; #endif
#include<iostream> using namespace std; #include"mgraph.h" template<class datatype> mgraph<datatype>::mgraph(datatype a[],int n,int e) { int i,j,k; vertexNUM=n; arcNUM=e; for(i=0;i<vertexNUM;i++) vertex[i]=a[i]; for(i=0;i<vertexNUM;i++) for(j=0;j<vertexNUM;j++) arc[i][j]=0; for(k=0;k<arcNUM;k++) { cout<<"请输入边的两个顶点的序号:"; cin>>i>>j; arc[i][j]=1; arc[j][i]=1; } } template<class datatype> void mgraph<datatype>::DFS(int v) { cout<<vertex[v];visited[v]=1; for(int j=0;j<vertexNUM;j++) if(arc[v][j]==1&&visited[j]==0) DFS(j); } template<class datatype> void mgraph<datatype>::BFS(int v) { int Q[Max]; 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; } } } template<class datatype> void mgraph<datatype>::APP() { for(int i=0;i<vertexNUM;i++) { cout<<vertex[i]<<"的邻接点为"; for(int j=0;j<vertexNUM;j++) { if(arc[i][j] == 1) { cout<<vertex[j]<<" "; } } cout<<endl; } }
#include<iostream> using namespace std; #include "mgraph.cpp" int visited[Max]={0}; int main() { char ch[]={'a','b','c','d','e'}; mgraph<char> MG(ch,5,6); for(int i=0;i<Max;i++) visited[i]=0; cout<<"深度优先遍历序列是:"; MG.DFS(0); cout<<endl; for(i=0;i<Max;i++) visited[i]=0; cout<<"广度优先遍历序列是:"; MG.BFS(0); cout<<endl; MG.APP(); cout<<endl; return 0; }
运行结果: