离散数学实验报告 实验3 欧拉路的确定

一、实验目的
理解欧拉图的概念,掌握欧拉通/回路的判定方法。
二、实验内容
输入一个无向简单图的邻接矩阵,判定该图是否含有欧拉通/回路。若有,请给出一条欧拉通/回路。
三、实验环境
采用C或C++语言为编程语言实现。
四、实验过程

  1. 算法分析
    (1) 无向图G是欧拉图当且仅当G是连通的且没有奇度顶点。
    (2) 无向图G是半欧拉图当且仅当G是连通的且恰有两个奇度顶点。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define N 100struct stacks
{int top;int node[100];
}s;int n, a[N][N],b[N];
bool visit[N];
int ans[N], cnt = 0; //记录欧拉路的路径,路径数
void show();
void DFS(int);
bool judge_connect();       //判断是否连通
void judge_euler();     //判断是否是欧拉回路
void Fleury(int x);
void answer();int main()
{memset(a, 0, sizeof(a));//memset(ans, 0, sizeof(ans));//使用循环可使用次代码重置数组为0printf("请输入顶点个数(小于等于100):\n");scanf_s("%d", &n);if (n < 0 || n>100){printf("请输入小于等于100的数!\n");exit(0);}for (int i = 0; i < n; i++)for (int j = i + 1; j < n; j++){a[i][j] = 0 + rand() % 2; //随机生成无向图a[j][i] = a[i][j];}show();if (judge_connect()){printf("该随机生成的图是连通图\n");judge_euler();}else{printf("该随机生成的图不是连通图\n");}return 0;
}void DFS(int x)
{visit[x] = true;for (int i = 0; i < n; i++)if (!visit[i] && a[x][i])DFS(i);
}
bool judge_connect()
{DFS(0);for (int i = 0; i < n; i++)if (!visit[i])return false;return true;
}
void judge_euler()
{int num = 0, start = 0, degree; // 奇度顶点个数, 欧拉路的起点, 每个顶点的度//如果存在奇度顶点,则从奇度顶点出发,否则从0出发for (int i = 0; i < n; i++){degree = 0;for (int j = 0; j < n; j++)degree += a[i][j];if (degree % 2){start = i;num++;}}//无向图具有一条欧拉路,当且仅当G是连通的,且有0个或2个奇数度结点if (num == 0 || num == 2){         Fleury(start);//欧拉路径的头和尾相等,则说明欧拉路是回路if (ans[0] == ans[cnt - 1])printf( "该图为欧拉图,欧拉回路为: ");elseprintf ( "该图为半欧拉图,欧拉通路为: ");answer();           }else{printf("非(半)欧拉图\n");}
}
void DFS2(int x) //深度优先遍历
{s.top++;s.node[s.top] = x;for (int i = 0; i < n; i++){if (a[i][x] > 0){a[i][x] = 0; //删边操作a[x][i] = 0;DFS2(i);break;}}
}
void Fleury(int x)  //Fleury算法
{int b;s.top = 0;s.node[s.top] = x; //起点入栈while (s.top >= 0){b = 0;for (int i = 0; i < n; i++){if (a[s.node[s.top]][i] > 0){b = 1;break;}}if (b == 0) //如果没有可扩展的点,则记录下该点并将其出栈{ans[cnt++] = s.node[s.top] + 1;s.top--;}else //如果有,则将其出栈并继续搜索{s.top--;DFS2(s.node[s.top + 1]);}}printf("\n");
}
void answer()  //输出答案
{for (int i = 0; i < cnt; i++)printf("%d ", ans[i]);printf("\n");}
void show() //输出随机生成的无向图关系矩阵
{for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){printf("%d\t", a[i][j]);}printf("\n");}
}

离散数学实验报告 实验3 欧拉路的确定相关推荐

  1. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...

    贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...

  2. linux内核态real cred,Linux内核实验报告——实验5.doc

    Linux内核实验报告 实验题目:新系统调用设计实验 实验目的: 系统调用是内核提供给用户应用程序使用的内核函数名,这些函数提供了内核为用户 应用程序所提供的系统服务功能.这些函数在用户应用程序中的书 ...

  3. java程序设计教程实验报告_java程序设计课程--实验报告-实验13.doc

    java程序设计课程--实验报告-实验13.doc 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: ...

  4. c语言实验四报告,湖北理工学院14本科C语言实验报告实验四数组

    湖北理工学院14本科C语言实验报告实验四 数组.doc 实验四 数 组实验课程名C语言程序设计专业班级 14电气工程2班 学号 201440210237 姓名 熊帆 实验时间 5.12-5.26 实验 ...

  5. 虚拟实验工场大学计算机实验报告答案,虚拟实验实验报告 - 实验报告 - 书业网.doc...

    虚拟实验实验报告 - 实验报告 - 书业网 虚拟实验实验报告 - 实验报告 - 书业网 篇一:虚拟实验报告 第一章 文献综述 1.1 丙酮酸脱氢酶概述 丙酮酸脱氢酶复合体(Pyruvate Dehyd ...

  6. 苏州大学实验报告模板C语言,苏州大学实验报告-实验flash在线编程实验

    1.实验Flash在线编程实验一实验目的1进一步熟悉MT-IDE嵌入式开发系统环境.汇编.C语言.调试方式.2进一步学习SCI通信的内容.3掌握Flash存储器在线编程的基本概念.4熟悉GP32芯片F ...

  7. c语言实验题水仙花数5359,《C语言程序设计》实验报告(实验1-12).doc

    <C语言程序设计>实验报告(实验1-12).doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会 ...

  8. 大学计算机张青答案,《大学计算机Ⅰ》实验报告实验一1

    <大学计算机Ⅰ>实验报告实验一1 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 广东金融学院实验报告课程名称:大学计算机I ...

  9. dsp 实验c语言,dsp实验报告 实验1 ccs入门实验2(c语言的使用)

    1. 1 DSP 实验报告实验报告 院 ( 系 ) 名 称 自 动 化 科 学 与 电 气 工 程 学 院 学 生 姓 名 学 号 任 课 老 师 吴 冠 2014 年 6 月 DSP 实验报告 1 ...

最新文章

  1. 大数据SQL日常学习——NVL函数
  2. Silverlight视频教程、资源下载。如果你觉得看图文不够形象,不够生动,那就看看视频吧。...
  3. C++和Rust_【Rust水群夜话】盘点Rust 官方团队2019年进展
  4. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
  5. android黑窗口获取md5_Android获取文件的MD5
  6. QT 中的 Graphics View 系统
  7. 专题导读:新基建环境下的数据资产价值评估与定价
  8. C#设计模式之3-建造者模式
  9. treeset java api_JAVAAPI学习值TreeSet类
  10. jquery读取json文件然后赋值给html,Jquery读取json文件的代码举例
  11. [个人笔记] origin学习 入门教程
  12. 在linux上将ape转成mp3,以及MP3 大小转换
  13. 如何平衡CVR预估中的延迟反馈问题?(内含招聘)
  14. 半同步/半反应堆模型以及简单实现(一)
  15. 2018上海科技大学991数据结构与算法
  16. PM应该了解的九大项目管理问题
  17. 智能汽车操作系统行业研究及十四五规划分析报告
  18. html背景图片纵向缩小,css怎么把背景图片缩小?
  19. 操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)
  20. 奋斗吧,程序员——第四十六章 此情可待成追忆,只是当时已惘然

热门文章

  1. 【社区图书馆】30+危机,最值得读烂的5本书|必读
  2. Exception encountered during context initialization(报错详解)
  3. 跟zzt学长学习姿势——集合(set)的运用
  4. ggplot2日期时间标度的设置
  5. Yapi测试插件--cross-request
  6. Mysql复制数据库--star.Hou
  7. 运筹学 知识点总结 单元综合测试(一)
  8. 职业教育计算机教育美育,中职计算机职业素质教育
  9. 励志必看-------没有伞的孩子必须努力奔跑!
  10. Android操作系统简介