- 19
- 0
- 约3.13千字
- 约 9页
- 2016-12-28 发布于湖北
- 举报
一、实验目的
判断随机生成的邻接矩阵是否为欧拉图或欧拉半图,若是,求取其欧拉回路或欧拉路。
二、问题分析
本实验的最终目的是要求取欧拉图的欧拉回路或欧拉半图的欧拉路,那么在这之前我们需要完成的是邻接矩阵的生成,图的连通性判别,如若连通,再判断其是否为欧拉图或欧拉半图,最终求取欧拉回路或欧拉路。
1.生成随机矩阵
定义数组二维数组l[][],用以存储邻接矩阵的信息。再定义结点数目n,从键盘键入之。根据n的大小,在嵌套的for循环中,每次循环都利用rand函数随机生成某数并对2取余,将结果赋值给l[i][j]。当然在for循环之前需要调用srand函数取计算机当前时间作为种子,防止rand函数生成伪随机数。
2.判断连通性
考虑到在上述步骤中已经有图的邻接矩阵生成,可以考虑用可达性矩阵来判断图的连通性。
这样,问题的关键就变成了求取可达性矩阵的问题。
为了不影响原邻接矩阵信息,定义新二维数组p[][]复制邻接矩阵数据来进行运算操作,并定义二维数组s[][],初始化为全0,用来存储最终可达性矩阵。
具体操作应为:首先将利用for循环将p与l相乘,结果存于p中;而后将p加上s,结果存于s中。再将以上步骤整体置于一个循环n次的for循环下。执行完之后,检查s[][],将非零值都修正为1,这样我们可以得到可达性矩阵s[][]。
最后,遍历检查s[][]中每个元素的值,如果发现有元素值为0,那么该图不具有连通性;否则,该图具有连通性,可以进行下面步骤的判断。
3.判断是否为欧拉图或欧拉半图
定义数组deg[],用来存储每个结点的度。依行检查l[][],将第i行的值相加可得deg[i]。再依据deg[]来判断该图是否为欧拉图或欧拉半图:如果每个结点的度均为偶数,该图为欧拉图;如果奇数度结点个数为2,该图为欧拉半图;否则,两者均不是。
4.欧拉路或欧拉回路的求取
对于欧拉路或欧拉回路的求取,我们依旧利用邻接矩阵来求。
(1)求取欧拉回路时,我们可以任意选择起点开始。按行搜索邻接矩阵,若果检查第i行时发现l[i][j]非0,将其修正为0后,输出i-j,搜索第j行,如此循环,可得欧拉回路。
当然在此之前我们需要求得每个结点的度数之和sum,来控制上述循环次数不超过sum/2,使得循环可以适时结束。
(2)在求取欧拉路时,只要控制循环起点为奇数度结点即可。其他步骤与上述求取欧拉回路步骤一致。
三、具体程序实现
#include iostream
#include cstdlib
#include ctime
using namespace std;
int main()
{
int n,l[20][20],p[20][20],s[20][20];
int deg[20];//用于存储每个结点的度数
int count1=0;//用于存储奇数度结点个数
int start=0;
srand((int)time(0));
cout请输入结点个数:;
cinn;
for(int i=0;in;i++)
{
for(int j=i;jn;j++)
{
if(i==j)
l[i][j]=0;
else
{
l[i][j]=rand()%2;
l[j][i]=l[i][j];
}
}
}
cout随机生成领接矩阵:endl;
for(i=0;in;i++)
{
deg[i]=0;
for(int j=0;jn;j++)
{
coutl[i][j] ;
}
coutendl;
}
//通过可达性矩阵判断连通性
for(i=0;in;i++)
{
for(int j=0;jn;j++)
{
p[i][j]=l[i][j];
s[i][j]=0;
}
}
for(int y=0;yn;y++)
{
for(i=0;in;i++)
{
for(int j=0;jn;j++)
{
s[i][j]+=p[i][j];
}
}
for(i=0;in;i++)
{
for(int j=0;jn;j++)
{
for(int k=0;kn;k++)
{
p[i][j]+=p[i][k]*l[k][j];
}
}
}
}
for(i=0;in;i++)
{
for(int j=0;jn;j++)
{
if(s[i][j]!=0)
{
s[i][j]=1;
}
}
}
cout可达性矩阵为:endl;
fo
您可能关注的文档
- 液晶显示原理考简析.doc
- 核心边缘模型:和启示解剖.doc
- 黑建筑监理规划解剖.doc
- 矿山救护仪器装备应知应会解答.doc
- 矿物晶体七大晶系图解解答.doc
- 液体压强简析.doc
- 昆明理工大学10级大学物理Ⅱ考卷B试卷解答.doc
- 昆明理工大学工程力学习题册解答.doc
- 液压万能试验机开题简析.doc
- 液压与气压传动-复习参考简析.doc
- 人教版八年级上册历史精品教学课件 第六单元 中华民族的抗日战争 第17课 七七事变与全民族抗战 (6).ppt
- 人教版八年级上册历史精品教学课件 期末专题复习 专题二 中国人民近代化的探索 (2).ppt
- 人教版八年级上册历史精品教学课件 第二单元 近代化的早期探索与民族危机的加剧 第5课 甲午中日战争与列强瓜分中国狂潮 (2).ppt
- 人教版八年级上册历史精品教学课件 第七单元 人民解放战争 大概念引领下的大单元复习 (4).ppt
- 人教版八年级上册历史精品教学课件 第七单元 人民解放战争 第21课 人民解放战争的胜利 (2).ppt
- 人教版八年级上册历史精品教学课件 第三单元 资产阶级民主革命与中华民国的建立 第10课 中华民国的创建 (2).ppt
- 人教版八年级上册历史精品教学课件 第四单元 新民主主义革命的开始 第12课 新文化运动 (3).ppt
- 第四组塑料低温脆化温度测试详解演示文稿.ppt
- 第消费者行为演示文稿.ppt
- 第一部分用搜索方法求解问题演示文稿.ppt
原创力文档

文档评论(0)