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

本文档详细介绍了如何使用邻接矩阵存储无向图,并通过深度优先和广度优先算法进行遍历。实验内容包括定义图结构、输入边、遍历输出顶点序列以及邻接点信息。提供了完整的C++代码示例。
摘要由CSDN通过智能技术生成

一、实验目的 

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

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

 3、 学会图的遍历算法 

二、 实验内容 

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

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

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

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

 三、实验步骤

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

 2、设计具体的算法;

 3、写出完整程序;

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

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


#include<iostream.h>
const int MaxSize = 10;
int visited[MaxSize]={0};


class MGraph
{
public:
MGraph(char a[],int n,int e);//n个点,e条边
~MGraph(){}
void DFST(int v);
void BFST(int v);
private:
char vertex[MaxSize];//存放点数组
int arc[MaxSize][MaxSize];//存放边数组
int vertexnum,arcnum;
};


MGraph::MGraph(char 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<arcnum;j++)
{arc[i][j]=0;}
for(k=0;k<arcnum;k++)
{
cout<<"请输入边的两个顶点的序号:";
cin>>i>>j;//输入依的两个点编号
arc[i][j]=1;arc[j][i]=1;//
}
}


void MGraph::DFST(int v)
{
cout<<vertex[v];
visited[v]=1;
for(int j=0;j<vertexnum;j++)
{
if(arc[v][j]==1&&visited[j]==0)
DFST(j);
}
}


void MGraph::BFST(int v)
{
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()
{
char ch[]={'A','B','C','D','E'};
MGraph MG(ch,5,6);
for(int i=0;i<MaxSize;i++)
{visited[i]=0;}
cout<<"深度优先:";
MG.DFST(0);
cout<<endl;
for(i=0;i<MaxSize;i++)
{visited[i]=0;}
cout<<"广度优先:";
MG.BFST(0);
cout<<endl;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值