版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、离散数学实验报告(2015 / 2016 学年 第 一 学期)题 目: 图的随机生成及欧拉(回)路的确定 专 业 信息安全 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机学院计算机科学与技术系 日 期 2015年12月29日 图的随机生成及欧拉(回)路的确定一、 实验内容和要求内容:编程随机生成n个结点的无向图并能进行(半)欧拉图的判定,若是则给出欧拉(回)路。要求:对给定n个结点,随机生成邻接矩阵以确定某无向简单图并进行欧拉图和半欧拉图的判定,若符合则给出至少一条欧拉回路或欧拉路。2、 实验目的对给定n个结点,随机生成邻接矩阵以确定某无向简单图并进行欧拉图和半欧拉图的
2、判定,若符合则给出至少一条欧拉回路或欧拉路。三、实验任务 1、输入结点个数据生成随机图2、进行(半)欧拉图的判定3、若是则给出欧拉(回)路。四、实验内容 #include <iostream>#include <ctime>#include <cstdlib>using namespace std;class Eulerpublic:Euler(int num);Euler();void DFS(int begin); /公有的深度优先搜索函数void inputEdge(); /输入边void PrintAM(); /打印邻接矩阵void PrintRM(
3、); /打印可达性矩阵void Warshall(); /Warshall算法求可达性矩阵bool IsConnected(); / /判断图是否连通int IsEorSE(); /判断图是欧拉图还是半欧拉图bool isEuler;private:void DFS(int u,int v,bool *visited); / /私有的深度优先搜索函数int n;int *a; /定义动态二维数组int *p; /定义可达性矩阵int *b; /存储每个结点的度数;Euler:Euler(int num) /构造函数isEuler=false;n=num;int i,j;a=new int*n;
4、for(i=0;i<n;i+)ai=new intn;for(j=0;j<n;j+)aij=0;p=new int*n;for(i=0;i<n;i+)pi=new intn;for(j=0;j<n;j+)pij=0;b=new intn;for(i=0;i<n;i+)bi=0;Euler:Euler()/析构函数int i;for(i=0;i<n;i+) delete ai;delete a;for(i=0;i<n;i+) delete pi;delete p;delete b;void Euler:inputEdge()srand(unsigned)
5、time(NULL); for(int i = 0; i < n; i+) for(int j = i + 1; j < n; j+) aij = 0+rand()%2; /随机生成无向图 aji=aij; for(int ii=0;ii<n;ii+)for(int jj=0;jj<n;jj+)if(aiijj=1)piijj=1;pjjii=1;void Euler:PrintAM()cout<<"随机生成的图为:"<<endl;for(int i=0;i<n;i+)for(int j=0;j<n;j+)cout
6、<<aij<<" "cout<<endl;void Euler:Warshall()for(int i=0;i<n;i+)for(int j=0;j<n;j+)if(pji=1)for(int k=0;k<n;k+)if(pjk+pik>0)pjk=1;void Euler:PrintRM()cout<<"可达性矩阵:"<<endl;for(int i=0;i<n;i+)for(int j=0;j<n;j+)cout<<pij<<&qu
7、ot; "cout<<endl;bool Euler:IsConnected()int i,j;bool flag=true; / /flag标记是否连通for(i=0;i<n;i+)for(j=0;j<n;j+)if(pij=0) /如果可达性矩阵中有一个元素为0, /就跳出循环,表示该图不连通flag=false;break;if(!flag)break;if(!flag)cout<<"该图不是连通的"elsefor(i=0;i<n;i+)for(j=i;j<n;j+)if(aij=1&&i!=j
8、) /由边计算结点的度数bi+;bj+;return flag;int Euler:IsEorSE()int i,count=0,begin=-1;cout<<"每个结点的度数:"<<endl;for(i=0;i<n;i+)cout<<i<<":"<<bi<<endl;for(i=0;i<n;i+)/计算奇数结点的个数if(bi%2!=0)count+;begin=i;/初始化开始结点,存在奇数结点,则将其中一个作为开始点if(begin=-1)/不存在奇数结点则将0作为
9、起始点begin=0;if(count=2)cout<<"该图是半欧拉图"<<endl;isEuler=true;/isEuler标记是否是(半)欧拉图else if(count=0)cout<<"该图是欧拉图"<<endl;isEuler=true;return begin;void Euler:DFS(int begin)int i,j;bool *visited=new bool*n;/二维数组记录每条边是否被访问过for(i=0;i<n;i+)/初始化visitedi=new booln;fo
10、r(j=0;j<n;j+)if(aij=1)visitedij=false;elsevisitedij=true;for(j=0;j<n;j+)if(!visitedbeginj) DFS(begin,j,visited);cout<<begin<<" "for(i=0;i<n;i+) delete visitedi;/释放内存delete visited;void Euler:DFS(int u,int v,bool *visited)if(!visiteduv)/判断边<u,v>是否访问过visiteduv=true
11、;visitedvu=true;/标记被访问for(int i=0;i<n;i+)DFS(v,i,visited);cout<<v<<" " /输出结点int main()int n,m,begin;bool flag;cout<<"输入结点个数:"cin>>n;Euler euler(n);euler.inputEdge();euler.PrintAM();euler.Warshall();euler.PrintRM();flag=euler.IsConnected();if(flag) begin
12、=euler.IsEorSE();if(euler.isEuler)cout<<"具体路径为:"euler.DFS(begin);cout<<endl;return 0;五、测试数据及其结果分析6、 调试过程中的问题可达性矩阵无法正确计算,调试后发现是算法中未正确定义循环变量七、程序设计总结1.掌握了与离散数学理论相关的编程实现思想和方法,掌握了欧拉图和半欧拉图的判定。2.利用邻接矩阵表示存在的边,通过Warshall算法求出无向图的可达性矩阵,如果是连通的话,那么可达性矩阵中每一个元素都应该为1,否则存在元素为0。3.多次利用动态二维数组,并养成了在程序结束时释放动态二维数组内存的习惯。4.明白了欧拉回路属于欧拉路的一种特殊情况,之前一直没有搞清这两者之间的关系。在判断是欧拉图还是半欧拉图时,首先判断是不是连通图,然后判断是否只存在零个或者两个奇数度结点,有两个则是半欧拉图,零个则是欧拉图。5.输出欧
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年政府工作报告起草组成员解读新基建工程三大特点:创新绿色普惠
- 2026年国家执业兽医从业资格考试全真模拟试卷及答案(共四套)
- 2026年高考英语十校联考全真模拟试卷及答案(共三套)
- 2026年安全生产消防应急预案演练总结报告
- 对外贸易科2026年上半年工作总结
- 客户优先服务态度承诺书8篇范文
- 2026年产品定价策略调整告知(8篇)
- 职业技能提升与行业交流研讨会活动方案
- 多场景报告分析标准化工具
- 企业守法诚信经营承诺函7篇
- 平方根(第1课时)课件2025-2026学年人教版七年级数学下册
- 江苏省重点高中2026届高三九校联考数学试卷(含答案详解)
- 2026银行间市场数据报告库(上海)股份有限公司招聘30人笔试备考题库及答案解析
- 2026年哈尔滨科学技术职业学院单招职业技能考试题库附答案
- 2025国家义务教育质量监测小学德育测评估考试试题库及答案
- GB/T 21655.1-2008纺织品吸湿速干性的评定第1部分:单项组合试验法
- 2023年初中数学教师高级职称考试试题含解析
- 《我参与我奉献》教学标准课件【部编版】1
- 农产品质量安全知识培训课件
- 危险化学品一书一签 化学品安全技术说明书
- 水平定向钻穿越高速公路施工方案
评论
0/150
提交评论