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

一、实验目的 

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;
}

猜你喜欢

转载自blog.csdn.net/Wayne_Xiaowei/article/details/80531240