离散数学课程设计----图的矩阵表示及基本运算
离散数学课程设计.图的矩阵表示及基本运算

中国矿业大学软件开发基础实践报告姓名: xxs 学号: bbaa0edf 专业:计算机科学与技术指导教师: sjc 职称: js(仅供徐海计算机参考哈哈哈哈)2012 年 6 月 20 徐州目录第一章实验概述 (3)1.1实验目的 (3)1.2实验内容 (3)1.3实验环境 (3)第二章实验原理和实现过程 (4)2.1实验原理 (4)2.1.1建立图的邻接矩阵,判断图是否连通 (4)2.1.2 计算任意两个结点间的距离 (4)2.1.3对不连通的图输出其各个连通支 (5)2.2实验过程(算法描述) (5)2.2.1 程序整体思路 (5)2.2.2具体算法流程 (5)第三章实验数据及结果分析 (7)3.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析 (7)3.1.1输入无向图的边 (7)3.1.2建立图的连接矩阵 (8)3.2其他功能的功能测试和结果分析 (9)3.2.1计算节点间的距离 (9)3.2.2判断图的连通性 (9)3.2.3输出图的连通支 (10)3.2.4退出系统 (10)第四章实验收获和心得体会 (11)4.1实验收获 (11)4.2心得体会 (12)第五章实验源程序清单 (13)5.1程序代码 (13)第一章实验概述1.1 实验目的理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的连通支方法。
通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算,培养逻辑思维;通过实验提高学生编写实验报告、总结实验结果的能力,提高理论联系实际的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
1.2 实验内容以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A),并计算任意两个结点间的距离(B),对不连通的图输出其各个连通支(C)。
注意:题目类型分为A,B,C三类,其中A为基本题,完成A类题目可达到设计的基本要求,其他均为加分题,并按字母顺序分数增加越高。
离散数学教案

滁州学院计算机与信息工程学院课程教案课程名称:离散数学授课教师:赵欢欢授课对象:11级网络工程专业3、4班授课时间:2012年9月-2012年12月滁州学院计算机科学与信息工程学院2012年8月《离散数学》教学大纲(Discrete Mathematic)课程代码:学时:48 学分:3一、课程简介本大纲根据2009版应用型人才培养方案制订。
(一)教学对象:网络工程、计算机科学与技术专业本科学生(二)开课学期:第三学期(三)课程类别:专业基础课(四)考核方式:考试(五)参考教材:《离散数学》第2版邓辉文清华大学出版社2010.主要参考书目:[1]邵学才,叶秀明. 离散数学[M].北京电子工业出版社,2009.[2]邵志清,虞慧群. 离散数学[M].北京电子工业出版社,2003.[3]屈婉玲. 离散数学习题解析[M].北京大学出版社,2008.本课程的先修课程是高等数学、线性代数,后续课程包含数据结构、数据库原理及应用、操作系统、数字逻辑、人工智能、算法分析与设计等。
二、教学基本要求与内容安排(一)教学目的与要求离散数学是研究离散量的结构及其相互关系的学科,它在各学科领域特别在计算机科学领域有着广泛的应用,同时离散数学也是计算机专业的许多专业课程必不可少的先行课程。
本课程的教学目的旨在通过对离散数学的教学,让学生不但可以掌握处理如集合、代数结构和图等离散结构的描述工具和方法,为后续课程的学习创造条件,而且为学生今后提高专业理论水平,从事计算机行业的实际工作提供必备的抽象思维和严格的逻辑推理能力,为将来参与创新性的研究和开发工作打下坚实的基础。
(教学要求:A—熟练掌握;B—掌握;C—了解)三、实验内容本课程无实验制订人(签字):审核人(签字):教学进度表系主任签名:院长签名:年月日年月日说明:1.本教学进度表由主讲教师负责填写,于每学期开学第一周内送交教师所在系,经领导审定、签字后备查。
2.此表一式三份,其中,任课教师一份,教师所在系一份,教务处一份。
离散数学-图的矩阵表示

分析:从 到 长度为2的路,中间必须经过 如果图G 中有路 存在,则肯定有 ,反之如果 图G中不存在路 ,那么 或者 ,即 于是从结点 到 的长度为2的路的数目就 等于:
按照矩阵的乘法规则,上式恰好等于矩阵 的元素,即 表示从 到 ; 的长度为2的路的数目
中第i行,第j列
考虑从vi到v j的长度为3的路的数目,可以看作是由vi到vk的长度为1的路,再 联结vk 到v j的长度为2的路,则类似可知从vi到v j的长度为3的路的数目为: a
( 3) ij ( 2) aik akj ,即为( A(G )) 3的第i行,第j列元素。 k 1 n
行相加运算: 有向图:对应分量普通加法运算; 无向图:对应分量模2加法运算。 行相加相当于G中对应结点的合并。 air a jr 1 ,说明v 和v 中只有一个结点是边e 的端点,合并 i j r 后仍是er的端点。
air a jr 0 ,有两种情况:
a、vi,vj都不是er的端点; b、vi,vj都是er的端点,合并后删去自回路。 若合并后完全关联矩阵中出现元素全为0的列,表明对应的 边消失。 有了这种运算,就可以运用这种运算求关联矩阵的秩
1 0 1 0
0 1 0 0
0 1 ,求G的可达性矩阵。 1 0
Байду номын сангаас
0 2 A2 1 0
0 1 1 1
1 0 1 0
1 1 1 0
2 1 A3 2 0
4 5 7 2 2 4 4 1
1 2 2 0
3 6 7 2
0 1 1 1
由前面的定理7-2.1的推论可知,如果在vi到vj之间存在路,必定存在 一条长度不超过n的通路,所以l只需计算到n就可以了。
离散数学5-图的基本概念和矩阵表示

图的情况存在,例如下图:
21
§3 图的同构和子图
例:证明下图中的两个有向图是同构的。
证明:作映射 g(a)=4, g(b)=1, g(c)=2, g(d)=3, g(e)=5。
在该映射下,边<a,e>, <b,a>, <d,a>, <b,c>, <e,b>, <d,c>, <c,e>,
§1 基本概念
例:画出下列多重图G(V,E)的图形,其中V = {P1, P2, P3, P4, P5},且
(a)E = [{P2, P4 }, {P2, P3},{P3, P5 },{P5, P4 }];
(b)E = [{P1, P1 }, {P2, P3},{P2, P4 },{P3, P2 },{P4, P1 },{P5, P4 }];
为由边集E'导出的子图。
24
§3 图的同构和子图
➢ 下图展示了图G及其子图:
25
第五章 图的基本概念和矩阵表示
1.1 基本概念
1.6 矩阵表示
1.2 握手定理
1.7 路径
1.3 图的同构和子图 1.8 图的着色
1.4 图的操作
1.9 匹配
1.5 连通性
26
§4 图的操作
设图G1=<V1,E1>和图G2=<V2,E2>
+ ( ) = − ( ) =
∈
∈
( ) = +( ) + − ( ) =
∈
∈
Hale Waihona Puke 握手定理及其推论解释了结点数和边数的关系,我们可
第7章 图论 [离散数学离散数学(第四版)清华出版社]
![第7章 图论 [离散数学离散数学(第四版)清华出版社]](https://img.taocdn.com/s3/m/58b7923143323968011c9244.png)
6/27/2013 6:02 PM
第四部分:图论(授课教师:向胜军)
21
例:
a j i h c g d
1(a)
无 向 图
b
f
e
2(b)
7(j) 8(g) 9(d) 10(i)
6(e)
3(c) 4(h)
5(f)
6/27/2013 6:02 PM
第四部分:图论(授课教师:向胜军)
22
例:
1(b)
有向图
第四部分:图论(授课教师:向胜军)
6
[定义] 相邻和关联
在无向图G中,若e=(a, b)∈E,则称a与 b彼此相邻(adjacent),或边e关联 (incident) 或联结(connect) a, b。a, b称为边e的端点或 结束顶点(endpoint)。 在有向图D中,若e=<a, b>∈E,即箭头 由a到b,称a邻接到b,或a关联或联结b。a 称为e的始点(initial vertex),b称为e的终点 (terminal/end vertex)。
证明思路:将图中顶点的度分类,再利用定理1。
6/27/2013 6:02 PM 第四部分:图论(授课教师:向胜军) 9
[定理3] 设有向图D=<V, E>有n个顶点,m 条边,则G中所有顶点的入度之和等于所 有顶点的出度之和,也等于m。
即:
d ( v i ) d ( v i ) m.
i 1 i 1
n
n
证明思路:利用数学归纳法。
6/27/2013 6:02 PM
第四部分:图论(授课教师:向胜军)
10
一些特殊的简单图:
(1) 无向完全图Kn(Complete Graphs)
离散数学矩阵运算规律和应用

离散数学矩阵运算规律和应用矩阵是离散数学中的一个重要概念,广泛应用于各个领域。
矩阵的运算规律是研究矩阵性质和解决实际问题的基础。
本文将从定义、运算规律和应用三个方面详细介绍离散数学中矩阵运算规律的相关知识。
一、矩阵的定义矩阵是由m行n列元素排列成的矩形阵列,记作A=[aij],其中1≤i≤m,1≤j≤n。
矩阵的每个元素aij称为矩阵A的第i行第j列元素。
二、矩阵的运算规律1. 加法运算:矩阵相加时,要求两个矩阵的行数和列数相等。
对应位置的元素相加,得到新的矩阵。
2. 乘法运算:矩阵相乘时,要求第一个矩阵的列数等于第二个矩阵的行数。
按照阿基米德定律,逐个计算新矩阵的元素。
3. 数乘运算:将矩阵中的每个元素都乘以一个标量,得到新的矩阵。
4. 转置运算:将矩阵的行列互换,得到新的矩阵。
即A的转置记作AT。
5. 逆运算:若矩阵A存在逆矩阵A-1,满足AA-1=A-1A=I,其中I为单位矩阵。
只有方阵才存在逆矩阵。
三、矩阵运算的应用1. 线性方程组求解:可以利用矩阵运算求解线性方程组。
将线性方程组的系数矩阵和常数矩阵进行运算,得到方程组的解。
2. 网络图论:网络图论中的节点之间的连接可以用矩阵表示,利用矩阵运算可以分析网络的连通性、最短路径等问题。
3. 数据处理:在数据处理中,经常需要对数据进行矩阵运算,例如矩阵的加权平均、数据的降维等。
4. 图像处理:图像可以看作是一个二维矩阵,图像处理中常用的滤波器、旋转等操作都可以通过矩阵运算实现。
5. 人工智能:在神经网络和机器学习中,矩阵运算被广泛应用于模型的训练和预测过程中。
综上所述,离散数学中的矩阵运算规律和应用广泛且重要。
正确理解和应用矩阵运算规律,对于解决实际问题具有重要的意义。
无论是在学术研究还是工程实践中,对矩阵运算规律的熟练掌握和灵活应用都是必不可少的。
通过不断学习和实践,我们可以进一步提高对离散数学矩阵运算规律的理解和运用水平,为实际问题的解决提供更有效的方法和思路。
离散数学之图的矩阵表示及基本运算

实验四图的矩阵表示及基本运算实验目的学习图在计算机中的矩阵表示,并能利用课堂所学知识进行出度和入度的计算。
实验内容与要求根据输入的整数对,输出一个图形的邻接矩阵。
并求出各结点的出度和入度。
实验准备图可以用多种方式来表示,其中邻接矩阵是一种较简单的方式。
复习关于邻接矩阵的描述。
明确一下内容:1.如何使用邻接矩阵表示图。
2.利用图的邻接矩阵求结点的出度和入度的方法。
#include <iostream.h>int** g(int n){int** a, i, j;a = new int* [n];//分配指针数组for(i=0; i<n; i++)a[i] = new int[n];//分配每个指针所指向的数组for(i=0; i<n; i++)for(j=0; j<n; j++) a[i][j]=0;return a;}struct M{int n;int isOrient;int **ele;};class Operators{public:void CreateMatrix2(M *x, int n, int isOrient);void Input(M *x);void Show(M *x);int deg_out(M *a, int i);int deg_in(M *a, int i);void Maccessibility(M *a, M *Ma);void MatrixMultiple(M *a, M *b, M *m);void MatrixAdd(M *a, M *b);};void Operators::CreateMatrix2(M *x, int n, int isOrient){x->n=n;x->isOrient=isOrient;x->ele=g(x->n);}void Operators::CreateMatrix(M *x){int n, isOrient;cout<<"Matrix's n=";cin>>n;cout<<"Is the graph oriented? 1=yes, 0=no :";cin>>isOrient;CreateMatrix2(x, n, isOrient);}void Operators::Input(M *x){int i, j;while(1){cout<<"Input the edge's start-point and end-point, -1 is to finish inputing:";cin>>i>>j;if(i==-1 || j==-1) break;x->ele[i][j]=1;if(!x->isOrient) x->ele[j][i]=1;}}{int i, j;if(x->isOrient)cout<<"The oriented matrix: "<<endl;elsecout<<"The no-oriented matrix: "<<endl;for(i=0;i<x->n;i++){for(j=0;j<x->n;j++) cout<<x->ele[i][j]<<" ";cout<<endl;}}int Operators::deg_out(M *x, int i){int deg=0;for(int j=0; j<x->n; j++)if(x->ele[i][j]) deg++;return deg;}int Operators::deg_in(M *x, int i){int deg=0;for(int j=0; j<x->n; j++)if(x->ele[j][i]) deg++;return deg;}void Operators::MatrixMultiple(M *a, M *b, M *temp){int i,j,k;for(i=0;i<a->n;i++)for(j=0;j<b->n;j++)for(k=0;k<a->n;k++)temp->ele[i][j]+=a->ele[i][k]*b->ele[k][j];for(i=0;i<a->n;i++)for(j=0;j<b->n;j++)b->ele[i][j]=temp->ele[i][j];}void Operators::MatrixAdd(M *a, M *b){int i,j;for(i=0;i<a->n;i++)for(j=0;j<b->n;j++)a->ele[i][j]+=b->ele[i][j];}void Operators::Maccessibility(M *a, M *Ma){int i,j;M p, temp;CreateMatrix2(&p, a->n, a->isOrient);CreateMatrix2(&temp, a->n, a->isOrient);MatrixAdd(&p, a);MatrixAdd(Ma, a);for(i=0; i<=a->n; i++){MatrixMultiple(a, &p, &temp);MatrixAdd(Ma, &p);}Show(&p);Show(Ma);for(i=0;i<Ma->n;i++)for(j=0;j<Ma->n;j++)if(Ma->ele[i][j]) Ma->ele[i][j]=1;}void main(){Operators o;M x, y;o.CreateMatrix(&x);o.CreateMatrix2(&y, x.n, x.isOrient);o.Input(&x);o.Show(&x);int i;cout<<endl<<"The deg-out for the points"<<endl;for(i=0;i<x.n;i++)cout<<i<<":"<<o.deg_out(&x,i)<<" ";cout<<endl<<"The deg-in for the points"<<endl;for(i=0;i<x.n;i++)cout<<i<<":"<<o.deg_in(&x,i)<<" ";cout<<endl;o.Maccessibility(&x, &y);o.Show(&y);}。
离散数学课件14.4-5图的矩阵表示和运算

1 2 6 4
A4 0
0
0
1
0 0 1 0
0
0
0
1
求 D 中长度为 l 的通路数和回路数。
矩阵乘法
(ai(j2) )nn
n
其中ai(j2) aik akj k 1
aik akj
1 0
vi vk v j有通路 vi vk v j无通路
a(2 ij
)表示从
vi
到
v j 长度为2的通路数 (i
j)
或回路数 (i j) 。
求 D 中长度为l 的通路数和回路数。
考虑 Al (D) ,简记为 Al 。
(ai(jl) )nn
其中
a(l ij
)
ቤተ መጻሕፍቲ ባይዱ
n
a a (l1) (1) ik kj
k 1
a(l ij
)表示从
vi
到
v j 长度为 l
的通路数(i
j)
或回路数(i j)。
a(l ij
)为D
0 (vi与ej无关),
mij = 1 (vi与ej关联1次),
2 (vi与ej关联2次, 即ej是以vi为端点的环).
v1 e1 e2 e3 e4
v2
e5 v3
v4
1 1 1 0 0
解:M (G) 0 1 1 1 0 1 0 0 1 2 0 0 0 0 0
关联矩阵的性质:
1.
2.
3.
握手定理
图的差运算
设图G1=〈V1,E1〉和图 G2=〈V2,E2〉 (同为有向图或无向图)。
G1与G2的差: 定义为图G3=〈V3,E3〉, 其中E3=E1-E2,V3 为与E3中边所关联的顶点,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国矿业大学软件开发基础实践报告姓名: xxs 学号: bbaa0edf 专业:计算机科学与技术指导教师: sjc 职称: js(仅供徐海计算机参考哈哈哈哈)2012 年 6 月 20 徐州目录第一章实验概述 (3)1.1实验目的 (3)1.2实验内容 (3)1.3实验环境 (3)第二章实验原理和实现过程 (4)2.1实验原理 (4)2.1.1建立图的邻接矩阵,判断图是否连通 (4)2.1.2 计算任意两个结点间的距离 (4)2.1.3对不连通的图输出其各个连通支 (5)2.2实验过程(算法描述) (5)2.2.1 程序整体思路 (5)2.2.2具体算法流程 (5)第三章实验数据及结果分析 (7)3.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析 (7)3.1.1输入无向图的边 (7)3.1.2建立图的连接矩阵 (8)3.2其他功能的功能测试和结果分析 (9)3.2.1计算节点间的距离 (9)3.2.2判断图的连通性 (9)3.2.3输出图的连通支 (10)3.2.4退出系统 (10)第四章实验收获和心得体会 (11)4.1实验收获 (11)4.2心得体会 (12)第五章实验源程序清单 (13)5.1程序代码 (13)第一章实验概述1.1 实验目的理解图论的基本概念,图的矩阵表示,图的连通性,图的遍历,以及求图的连通支方法。
通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算,培养逻辑思维;通过实验提高学生编写实验报告、总结实验结果的能力,提高理论联系实际的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
1.2 实验内容以偶对的形式输入一个无向简单图的边,建立该图的邻接矩阵,判断图是否连通(A),并计算任意两个结点间的距离(B),对不连通的图输出其各个连通支(C)。
注意:题目类型分为A,B,C三类,其中A为基本题,完成A类题目可达到设计的基本要求,其他均为加分题,并按字母顺序分数增加越高。
基本要求如下:程序需具有基本的容错控制,在输入错误时有处理手段;程序界面友好,需要输入的地方有输入说明,说明输入的内容和格式要求等;实验原理和实现过程应该详细分析问题,给出解决思路,描述算法思想,不能用源程序代替算法;测试数据应全面,包括非法输入的处理结果等都应包含在内。
1.3 实验环境C或C++语言编程环境实现。
第二章实验原理和实现过程2.1 实验原理2.1.1建立图的邻接矩阵,判断图是否连通根据图的矩阵表示法建立邻接矩阵A,并利用矩阵的乘法和加法求出可达矩阵,从而判断图的连通性。
连通图的定义:在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的。
如果 G 是有向图,那么连接vi 和vj的路径中所有的边都必须同向。
如果图中任意两点都是连通的,那么图被称作连通图。
判断连通图的实现:在图中,从任意点出发在剩余的点中,找到所有相邻点循环,直到没有点可以加入为止,如果有剩余的点就是不连通的,否则就是连通的。
或者也可用WallShell算法,由图的邻接矩阵判断图是否连通。
2.1.2 计算任意两个结点间的距离图中两点i,j间的距离通过检验A l中使得a ij为1的最小的l值求出。
路径P中所含边的条数称为路径P的长度。
在图G<V,E>中,从结点Vi到Vj最短路径的长度叫从Vi到Vj的距离,记为d<Vi,Vj>。
设图的邻接矩阵是A,则所对应的aij的值表示,点Vi到点Vj距离为n的路径有aij条。
若aij(1),aij(2),…,aij(n-1),中至少有一个不为0,则可断定Vi与Vj可达,使aij(l)≠0的最小的l即为d(Vi,Vj)。
问题求解原理为:(1)先构造初始邻接矩阵A=Vij,Vij为顶点Vi到顶点Vj的权。
如果Vi 和Vj之间不存在弧段或者是负向回路或者是i=j,则令Vij其值为∞。
(2)再构造初始中间顶点矩阵。
(3)然后开始迭代计算(迭代的次数等于顶点的个数1)(4)最后查找Vi到Vj的最短路径。
计算节点Vi与Vj之间的距离的方法为:利用邻接矩阵相互间相乘后得到的矩阵来判断节点间的距离。
如果c2[s][i][j]==0,则这两个节点的距离为无穷大。
如果c2[s-2][i][j]==0,c2[s-1][i][j]==1时,则这两点间的距离为s。
2.1.3对不连通的图输出其各个连通支图的连通支的求法则可采用图的遍历算法,图的遍历有深度优先和广度优先两种方法,其中深度优先算法又分为递归和非递归两种。
在无向图中,如果任何两点可达,则称图G是连通的,如果G的子图G’是连通的,没有包含G’的更大的子图G’’是连通的,则称G’是G的连通支。
当有判断出关系不是连通的之后,将需要求出分支模块实现方法如下:先定义一个二维数组用来存放相应的分块,先选定一个点,并将它放在数组中,然后判断,如果后面的和他是联通的便将它也放在同一个数组中,否则将其存入其他的数组中,后面以此类推,在输出相应的数组,便可判断出连通分支。
2.2 实验过程(算法描述)2.2.1 程序整体思路本程序完成了实验所要求的全部功能,其基本思路是——“运用模块化的思想,将实现“求连通支”、“输入结点关系”、“输出邻接矩阵”、“显示两结点间的距离”、“求可达矩阵”和“图的遍历”的子函数分开编写,然后将它们以子函数的形式添加到主函数main的代码后面,在要使用相应的子函数时,进行子函数调用就可以实现相应的功能了。
”本程序的一大特色就是开发者灵活使用了C语言中的数组概念来进行开发,用数组来模拟矩阵的运算,通过相应的算法实现了全部的功能。
2.2.2具体算法流程在main(){系统界面显示;用do…while循环语句和switch语句实现功能1,2,3……的选择,并调用相关的子程序;用start、goto start实现控制流的转移;} liantongzhi(){求连通支,此子函数通过一个for循环控制遍历每个结点,并调用函数DFS()求每个结点的连通支;}DFS(int a){通过实参与形参,将结点数据代入函数;定义顺序栈变量;通过for循环初始化;为a置已访问标志,已经访问了的元素为1;定义顺序栈的第一个元素;通过while循环实现结点遍历,栈不为空时执行循环;栈顶元素赋值;通过for循环寻找v的下个未访问的邻接点;通过if条件句,若x,i是边和节点i未被访问过,处理结点的访问,并进行访问标志,进栈等操作;通过if条件句,若v已访问到的出点,则将其退栈;}shuru(){输入结点关系;通过for循环先将矩阵所有元素赋值0;再通过另一for循环,根据输入结点的关系,将矩阵中相应的元素赋值,有关系则为1;} linjiejuzhen(){输出邻接矩阵;通过for循环,依次按格式输出邻接矩阵的元素;} julijuzhen(){根据A的n次方矩阵及其中元素,判断并显示两结点间的距离;调用子函数linjiejuzhen(),以确定并显示距离为1的两结点;通过for循环显示距离为1的结点对;再通过一系列的for循环,计算A的n次方矩阵并显示结果,根据其中的元素,判断并显示结点间的距离;详细算法请见附录相关部分的注释;}kedajuzhen(){求可达矩阵;通过一系列for循环,根据公式,计算可达矩阵;通过for循环,将矩阵中不为0的一切值赋为1以生成可达矩阵并显示;通过for 循环和if条件句的组合,根据可达矩阵的元素特点,判断图的连通性,若可达矩阵矩阵中有0,则跳出循环,显示不可连接;根据判断结果显示内容,不可连通或可连通;}第三章实验数据及结果分析3.1建立图的邻接矩阵并判断图是否连通的功能测试及结果分析简单无向图的输入界面友好,有清楚的操作说明,方便用户进行使用。
这就是集合的输入界面。
3.1.1输入无向图的边当“6,5”时,表示输入的是六个节点五条边的树。
程序会在屏幕上显示输入节点间关系的界面,输入的关系为“1,2;2,3;3,4;4,5;5,6”3.1.2建立图的连接矩阵程序返回主界面后,选择“2”,程序会显示建立的连接矩阵。
3.2 其他功能的功能测试和结果分析3.2.1计算节点间的距离当选择“3”时,程序便会输出各节点间的距离。
3.2.2判断图的连通性当选择“4”时,程序会根据可达矩阵判断图的连通性。
3.2.3输出图的连通支当选择“5”时,程序会输出个连通支。
3.2.4退出系统当选择“6”时,程序会退出系统。
第四章实验收获和心得体会4.1 实验收获这次离散数学实验是基于图论方面知识,以图的各种矩阵为基础,来研究图的一些性质、特点。
我独立完成了本次实验设计,实现了A、B、C三个功能,满足了实验的基本要求,心得如下。
通过这次实验,我学会了用C语言根据图的矩阵表示法建立邻接矩阵A,并利用矩阵的乘法和加法求出可达矩阵,从而判断图的连通性。
巩固了课堂所学的图论方面的有关知识,并在实践中学到:图中两点i,j间的距离可以通过检验A l中使得a ij为1的最小的l值求出;图的连通支的求法可采用图的遍历算法,图的遍历有深度优先和广度优先两种方法,其中深度优先算法又分为递归和非递归两种。
我选择的算法是较为简单、易于实现的深度优先算法最简单,查阅了相关资料,掌握了此算法的核心,最后独立完成了本次实验设计。
这次离散数学实验,从拿到题目到完成整个编程,从理论到实践的日子里,我学到很多东西,不仅可以巩固了以前所学过的知识,而且通过查阅相关资料,学到了很多在书本上所没有学到过的知识。
在这段时间里,我对于离散数学中的“逻辑”有了进一步的理解,对C语言的理解也更进了一步,并提高了编写实验报告、总结实验结果的能力,提高了理论联系实际的能力,初步具备程序设计的思想,能够独立完成简单的算法设计和分析。
感受最深的是,大量的上机实践是成为“编程高手”的必由之路,“质变”需要有“量”的积累。
完成程序的编写,决不意味着万事大吉。
曾经自己认为万无一失的程序,实际上机运行时可能不断出现麻烦,如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
有时候一个小小错误会消耗我好的时间去找,而高手一眼就看出错误所在,这就是熟练程度的不同,量变到质变的不同。
4.2 心得体会这次真的使我意识到了很多原来没有意识到的问题,有时候一些很小的问题,也会令人很是头痛。
在刚开始编写程序的时候,为了实现最基本的输入和输出功能,我却花了大量的时间在那上面。
原因在后来查阅的很多资料后才知道的,像scanf函数之类的小函数,其实是还有很多需要注意的地方的。