实验6:图的实验1——图的邻接矩阵存储实现

来源:互联网 发布:腾讯企业邮箱域名 编辑:程序博客网 时间:2024/05/20 04:31

实验6:图的实验1

             -图的邻接矩阵存储实现

一、实验目的

1、   熟练理解图的相关概念;

2、   掌握图的邻接矩阵的存储方法的实现;

3、   学会图的遍历算法

二、 实验内容

1、自己确定一个简单无向图(顶点数、和相关结点信息)利用邻接矩阵来实现存储。实现图的构造,并完成:

1)用深度优先和广度优秀两种算法对图进行遍历,输出顶点序列数据;

2)以合理的格式,输出各个顶点的邻接点;

2、试设计一个程序,对一个有向简单图,完成上题同样的任务(*)。

三、实验步骤

1、依据实验内容,先确定具体的图,并说明图的顶点数据类型;

2、设计具体的算法;

3、写出完整程序;

4、总结、运行结果和分析算法效率。

5、总体收获和不足,疑问等。

四、实验要求

1、   按照数据结构实验任务书,提前做好实验预习与准备工作。

2、   在个人主页上发文章提交作业。

实验课会抽查3-5人,希望你可以被查到!


1、实验代码

头文件:

#include<iostream>#include<iomanip>#include<string>using namespace std;const Size = 10;

MGraph类:

class MGraph{public:MGraph(string a[],int n,int e);~MGraph(){};    void DFSTraverse(){ for(int j=0;j<Size;j++)   {visited[j] = 0;} DFSTraverse(0);}void BFSTraverse(int v);void Approximal();private: void DFSTraverse(int v);string vertex[Size];int arc[Size][Size];int vertexNum,arcNum;int visited[Size];};

构造函数:

MGraph::MGraph(string a[],int n,int e){vertexNum = n;arcNum = e;int i;for(i=0;i<vertexNum;i++){vertex[i] = a[i];}for(i=0;i<arcNum;i++){for(int k=0;k<vertexNum;k++){arc[i][k] = 0;}}for(i=0;i<arcNum;i++){int j,k;cout<<"请输入依附的两个点。"<<endl;cin>>k>>j;arc[k][j] = 1;arc[j][k] = 1;}}

深度遍历:

void MGraph::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);}}}

广度遍历:

void MGraph::BFSTraverse(int v){for(int j=0;j<Size;j++){visited[j] = 0;}int front,rear;front = rear = -1;cout<<vertex[v];visited[v] = 1;int Q[Size];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;}}}}

邻接点:

void MGraph::Approximal(){for(int i=0;i<vertexNum;i++){cout<<vertex[i]<<"的邻接点为";for(int j=0;j<vertexNum;j++){if(arc[i][j] == 1){cout<<setw(8)<<vertex[j];}}cout<<endl;}}

主函数:

void main(){int n=0,e=0;string a[Size];cout<<"请输入顶点数和边数"<<endl;cin>>n>>e;cout<<"请依次输入顶点内容"<<endl;for(int m=0;m<n;m++){cin>>a[m];}MGraph mgraph(a,n,e);cout<<"广度遍历:";mgraph.BFSTraverse(0);cout<<endl;cout<<"深度遍历:";mgraph.DFSTraverse();cout<<endl;cout<<"各个顶点的邻接点:"<<endl;mgraph.Approximal();}

2、实验截图



原创粉丝点击