离散数学之图的矩阵表示及基本运算

合集下载

离散数学-图的矩阵表示

离散数学-图的矩阵表示
设有向图G的结点集合 ,它的邻接矩阵 为 ,现在我们想计算从结点 到 结点 的 长度为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就可以了。

离散数学图的基本概论

离散数学图的基本概论

简单通路: = v0 e1 v1 e2… ek vk为通路且边e1 e2… ek 互不相同,又称之为迹,可简用v0 v1 … vk 来表示。 简单回路 (v0 = vk)又称为闭迹。
初级通路或基本通路: = v0 e1 v1 e2… ek vk为通路 且顶点v0 v1… vk 互不相同。 基本回路: v0 = vk。 初级通路一定是简单通路,但简单通路
不一定是一条初级通路。
例8.6 就下面两图列举长度为5的通路,简 单通路,回路,简单回路,再列举长 度为3的基本通路和回路。
e3 v5
e7 v4
v1
e2
e1 v2
e6 e4
e5 v3
e1 v5 e8 e4
v4
v1
e3
e2 v2
e6 e5
e7 v3
(1)
(2)
解:试对照定义,自己做一做!如:
(1)中 v1e1v2e2v5e3v1e1v2e4v3 为v1到v3的通路;
021?01ijn11iiij??????mmjm从而?12im1jijvdm?????mmvvddmm??????i?????1i?niinmijij11从而有从而有1?im1jijvdm??????由mij的定义知?11jmvdm????????i???1i??n1inm1jij1通路数与回路数的矩阵算法
平行边:无向图中,关联一对结点的无向边 多于一条,平行边的条数为重数; 有向图中,关联一对顶点的无向边 多于一条,且始、终点相同。
多重图:包含平行边的图。
简单图:既不包含平行边又不包含环的图。
二、度
度:(1) 在无向图G = < V, E >中,与顶点v(vV) 关联的边的数目(每个环计算两次),记 作:d(v)。

离散数学图的矩阵表示

离散数学图的矩阵表示

A4=
23321
01011
11010
22221
V4
v3
问每条:从vv33到到0 v0v1由1长1长0度上度0为可为22看的的路出路有A,n几中中条间元?02肯素11定a01经ij的11过10意1个义中:间结点vk,
A该 即 逐(G路个v)23=,k表遍v示历k,1为0201每=11111:个。a0101iv结每j=31100点k有1000表,v一k 示并个进v从vA1k,(,行Gv)在i3就乘到= 邻对法v接j应运长100矩一算302度阵个,111为中110v获3n110,,k取的v就从k路,1是=v3有1:到;kvv31条,k全=。1部,长vk度,1=为1,2 的路的数目:v3,1v1,1+v3,2其v中21+a3v2=3,33表v示3,1v+3到v3,v42长v4度,1+为v33,的5路v5,有1=3条v。3,ivi,1
由于,邻接矩阵的定义与关系矩阵表示定义相同,所以,可达性
矩阵P即为关系矩阵的MR+,因此P矩阵可用Warshall算法计算。
13
❖可达性矩阵的求解方法
23221 35332 58553 12111 46442
Br的任一元素bij表示的是从vi到vj长度不超过r的路的数目;
若bij 0,
若bij=0,
ij时,表示vi到vj可达, i=j时,表示vi到vi有回路;
ij时,表示vi到vj不可达, i=j时,表示vi到vi无回路;
在许多实际问题中,我们关心的往往是vi和vj之间是否存在路的 问题,而对路的数目不感兴趣,为此,引出可达矩阵。
由7.2.1推论,若从vi到vj存在一条路,则必存在一条边数小于n 的通路,(或边数小于等于n的回路)。即:如果不存在一条小

《离散数学》图论 (上)

《离散数学》图论 (上)
12
无向图与有向图
v2
e1
e2
e3
v3
e4
v1
e5 (e1)={( v42, v24 )}
v4
(e2)={( v32, v23 )} (e3)={( v3, v4 )}
(e4)=({ v43, v34 )}
(e5)=({ v4,}v4 )
13
无向图与有向图
A B C
D E F
14
无向图与有向图
第八章 图论
第八章 图论
§8.1 基本概念
§8.1.1 无向图、有向图和握手定理 §8.1.2 图的同构与子图 §8.1.3 道路、回路与连通性 §8.1.4 图的矩阵表示
§8.2 欧拉图 §8.3 哈密尔顿图 §8.4 平面图 §8.5 顶点支配、独立与覆盖
2
无向图与有向图
3
无向图与有向图
一个无向图(undirected graph, 或graph) G 指一个三元组 (V, E, ),其中
vV
vV
24
特殊的图
假设 G=(V, E, ) 为无向图,若 G 中所有 顶点都是孤立顶点,则称 G 为零图(null graph)或离散图(discrete graph);若 |V|=n,|E|=0,则称 G 为 n 阶零图 所有顶点的度数均相等的无向图称为正 则图(regular graph),所有顶点的度数 均为 k 的正则图称为k度正则图,也记作 k-正则图 注:零图是零度正则图
19
握手定理
定理(图论基本定理/握手定理)
假设 G=(V, E, ) 为无向图,则deg(v) 2 E , vV
即所有顶点度数之和等于边数的两倍。
推论
在任何无向图中,奇数度的顶点数必是偶 数。

离散数学第8章 图论

离散数学第8章 图论
ij
为d(vi,vj)。
8.2
图的矩阵表示
一、图的邻接矩阵 二、图的连接矩阵
三、图的关联矩阵
二、图的连接矩阵 定义 8-9 设图 G= ( V , E ),其中 V={v1 ,
v2 , … , vn } , n 阶方阵 C= ( cij ),称为图 G 的连接 矩阵,其中第i行j列的元素
1 c ij 0
利用邻接矩阵,我们可以 (1)判断G中任意两个结点是否相连接;
方法是:对 l=1,2,…,n–1,依次检查Al的(i,j)
项元素
(l ( ) ij)是否为0,若都为0,那么结点v 与v 不 a ij i j
相连接,否则vi与vj有路相连接。 (2)计算结点vi与vj之间的距离。
(1) ( 2) ( n 1) 中至少有一个不为0, 若 aij , aij , , aij 则可断定vi与vj相连接,使 a (l ) 0 的最小的 l 即
若中有相同的结点,设为ur= uk(r<k),则子路ur+1…uk可以从 中删去而形成一条较短的路= viu1…ur uk+1…uh–1 vj,仍连接vi到 vj 。 若中还有相同的结点,那么重复上述过程又可形成一条 更短的路,…。这样,最后必得到一条真路,它连接vi到vj, 并短于前述任一非真路。因此,只有真路才能是短程。
非真 生成
真 生成
真 非生成
非真 非生成
真 非生成
七、路与回路 定义:图G中l条边的序列{v0,v1}{v1,v2}…{vl–1,vl}称为连
接v0到vl的一条长为 l 的路。它常简单地用结点的序列 v0v1v2…vl–1vl来表示。其中v0和vl分别称为这条路的起点和终点。 开路:若v0vl,则称路v0v1v2…vl–1vl为开路; 回路:若v0=vl,则称路v0v1v2…vl–1vl为回路; 真路:若开路v0v1v2…vl–1vl中,所有结点互不相同(此时所有 边也互不相同),则称该路为真路; 环:在回路v0v1v2…vl–1v0中,若v0,v1,v2,…,vl–1 各不相同 (此时所有边也互不相同),则称该回路为环。

离散数学第九章 图的基本概念及其矩阵表示

离散数学第九章 图的基本概念及其矩阵表示
证明:设 V1 {v v 为奇点} , V2 {v v 为偶点} ,则 d (v) d (v) d (v) 2m 因为
奇数,因此
vV1
d (v) 是偶数,所以 d (v) 也是偶数,
V1 为偶数。
vV2
而 V1 中每个点 v 的度 d (v) 均为
vV1
vV2
图9.11 1至3阶完全有向图
显然,完全无向图的任意两个不同结点都邻接,完全有向图的任意两个不同结点之间都有 一对方向相反的有向边相连接。
9.1 图的基本概念
定理9.3 n个节点的无向完全图 证明:因为在无向完全图
k n 的边数为 Cn2 。
k n 中,任意两个节点之间都有边相连,所以 n
2 2 个节点中任取两个点的组合数为 Cn ,故无向完全图 的边数为 Cn 。
如果在
k n 中,对每条边任意确定一个方向,就称该图为 n 个节点的
2 有向完全图。显然,有向完全图的边数也是 Cn 。
主要内容
PART 01
PART 02
图的基本概念 子图和图的运算 路径、回路和连通性
图的矩阵表示
PART 03
PART 04
9.2 子图和图的运算
子图和补图
定义9.10 设 G V , E , 和 G ' V '(1)如果 V ' V , E ' E , ' ,则称 G ' 是 G 的子图,记作 G ' G, 并称 G 是 G ' 的母图。 (2)如果 V ' V , E ' E , ' ,则称 G ' 是 G 的真子图,记作
9.1 图的基本概念

矩阵的基本概念与运算

矩阵的基本概念与运算

矩阵的基本概念与运算矩阵是线性代数学科中的基础工具,这是因为矩阵可以用来表示线性变换和线性方程组。

对于矩阵的基本概念与运算,我们需要从以下几个方面来分析。

一、矩阵的基本概念1、定义与记法矩阵是一个由m行n列元素排成的矩形阵列,常用大写字母表示,如A、B、C等。

其中,阵列中的m表示矩阵的行数,n则表示矩阵的列数。

因此,一个m行n列的矩阵可以写成:$A_{m×n}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}& \cdots&a_{mn}\\\end{bmatrix}$其中,$a_{ij}$ 表示矩阵 A 中第 i 行第 j 列的元素。

2、矩阵的类型按照元素类型可以将矩阵分为实矩阵、复矩阵和布尔矩阵等。

按照矩阵的形状,矩阵可以分为方矩阵、长方矩阵和列矩阵等。

二、矩阵的基本运算1、矩阵的加法假设有两个矩阵 $A_{m×n}$ 和 $B_{m×n}$,它们对应位置相加的结果记作 $C=A+B$,则:$C_{ij}=A_{ij}+B_{ij}$2、矩阵的数乘假设有一个矩阵 $A_{m×n}$ 和一个数 $\lambda$,则它们的乘积记作 $B=\lambda A$,则:$B_{ij}=\lambda A_{ij}$3、矩阵的乘法假设有两个矩阵 $A_{m×n}$ 和 $B_{n×p}$,它们的乘积记作$C=AB$,则:$C_{ij}=\sum_{k=1}^n A_{ik}B_{kj}$矩阵乘法需要满足结合律,但不满足交换律,也就是说,$AB$ 与 $BA$ 不一定相等。

离散数学 7-3 图的矩阵表示

离散数学 7-3 图的矩阵表示
要条件,但也不是汉密尔顿图。
所以用此定理来证明某一特定图不是汉密尔顿图并不是
总是有效的。例如,著名的彼得森(Petersen)图,在图中删 去任一个结点或任意两个结点,不能使它不连通;删去3个结 点,最多只能得到有两个连通分支的子图;删去4个结点,只 能得到最多三个连通分支的子图;删去5个或5个以上的结点,
e3
v3
1 1 0 0 0
0 1 1 0 0
0 0 1 1 0
1 0 0 1 0
1 0 1 0 0
v3 0 v4 0 v5 0
无向图的关联矩阵反映出来图的性质:
每一条边关联两个结点,故每一列中只有两个1。
每一行中元素之和等于该行对应的结点的度数。
一行中元素全为0,其对应结点为孤立点。
两个平行边其对应的两列相同。 同一个图当结点或边的编号不同时,其对应的矩 阵只有行序列序的差别。
证明思路:1) 先证必要性: G有欧拉路 G连通 且(有0个 或 2个奇数度结点) 设G的欧拉路是点边序列v0e1v1e2… ekvk,其中结点可能重复, 但边不重复。因欧拉路经过(所有边)所有结点,所以图G 是连通的。 对于任一非端点结点vi,在欧拉路中每当vi出现一次,必关 联两条边,故vi虽可重复出现,但是deg(vi)必是偶数。对于端 点,若v0=vk ,则deg(v0)必是偶数,即G中无奇数度结点 。若 v0≠vk ,则deg(v0)必是奇数, deg(vk)必是奇数,即G中有两个奇 数度结点 。必要性证完。
e3
v3
0 0 0
-1 1 0 0
-1 1 0 0
有向图的关联矩阵的特点:
(1)每一列中有一个1和一个-1,对应一边一个始 点、一个终点,元素和为零。 (2)每一行元素的绝对值之和为对应点的度数。-1 的个数等于入度,1的个数等于出度。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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 CreateMatrix(M *x);
void CreateMatrix2(M *x, int n, int isOrient);
void Input(M *x);
}
}
void Operators::Show(M *x)
{
int i, j;
if(x->isOrient)
cout<<"The oriented matrix: "<<endl;
o-oriented matrix: "<<endl;
for(i=0;i<x->n;i++)
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;
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)<<" ";
};
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;
}
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)
{
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()
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;
{
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(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)
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);
{
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];
cout<<endl;
o.Maccessibility(&x, &y);
o.Show(&y);
}
{
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++)
实验四
实验目的
学习图在计算机中的矩阵表示,并能利用课堂所学知识进行出度和入度的计算。
实验内容与要求
根据输入的整数对,输出一个图形的邻接矩阵。并求出各结点的出度和入度。
实验准备
图可以用多种方式来表示,其中邻接矩阵是一种较简单的方式。复习关于邻接矩阵的描述。明确一下内容:
1.如何使用邻接矩阵表示图。
2.利用图的邻接矩阵求结点的出度和入度的方法。
相关文档
最新文档