无向图,有向图

无向图,有向图
无向图,有向图

无向图

【定义】

一个无向图(undirected graph)是一个二元组,其中:

1.V是非空集合,称为顶点集。

2.E是V中元素构成的无序二元组的集合,称为边集。

【解释】

直观来说,若一个图中每条边都是无方向的,则称为无向图。

(1)无向边的表示

无向图中的边均是顶点的无序对,无序对通常用圆括号表示。

【例】无序对(vi,vj)和(vj,vi)表示同一条边。

(2)无向图的表示

【例】下面(b)图中的G2和(c)图中的G3均是无向图,它们的顶点集和边集分别为:V(G2)={v1,v2,v3,v4}

E(G2)={(vl,v2),(v1,v3),(v1,v4),(v2,v3),(v2,v4),(v3,v4)}

V(G3)={v1,v2,v3,v4,v5,v6,v7}

E(G3)={(v1,v2),(vl,v3),(v2,v4),(v2,v5),(v3,v6),(v3,v7)}

注意:

在以下讨论中,不考虑顶点到其自身的边。即若(v1,v2)或是E(G)中的一条边,则要求v1≠v2。此外,不允许一条边在图中重复出现,即只讨论简单的图。

3.图G的顶点数n和边数e的关系

(1)若G是无向图,则0≤e≤n(n-1)/2

恰有n(n-1)/2条边的无向图称无向完全图(Undirected Complete Graph)

(2)若G是有向图,则0≤e≤n(n-1)。

恰有n(n-1)条边的有向图称为有向完全图(Directed Complete Graph)。

注意:

完全图具有最多的边数。任意一对顶点间均有边相连。

【例】上面(b)图的G2就是具有4个顶点的无向完全图。

有向图

【定义】

有向图是一个二元组,其中

1.V是非空集合,称为顶点集。

2.E是V×V的子集,称为弧集。

【解释】

直观来说,若图中的每条边都是有方向的,则称为有向图。有向图中的边是由两个顶点组成的有序对,有序对通常用尖括号表示,如表示一条有向边,其中vi是边的始点,vj是边的终点。代表两条不同的有向边。

【完全有向图】

有n个顶点的有向图有n(n-1)条边,则此图称为完全有向图。

数据结构中有向图和无向图的C语言实现

#include #include #include #define M 50 typedef char vextype;//顶点数据类型char typedef struct node //定义表结点类型 { int adjvex;//邻接点域 struct node *link;//指针域 }edgenode,*Edgenode; typedef struct headnode//定义表头结点类型 { vextype vexdata;//顶点数据域 struct node *firstarc;//指针域指向链表中的第一个结点 }vexnode,*Vexnode; typedef vexnode adjlist[M];//adjlist为邻接表类型 //无向图的邻接表生成算法 void creatlist1(vexnode ag[],int n) { edgenode *p; int i,j; char ch; cout<<"请输入顶点个数:"; cin>>n; for(i=1;i<=n;i++) { cout<<"第"<>ch;//读入顶点信息 ag[i].vexdata=ch;//设顶点为字符型 ag[i].firstarc=NULL;//将每个链表初始化为空 } cout<<"以(0,0)为输入结束符"<>i>>j; while((i>0)&&(j>0))//输入的(i,j)为(0,0)作为结束符号 { p=(edgenode*)malloc(sizeof(edgenode));//生成邻接序号为j的表结点 p->adjvex=j; p->link=ag[i].firstarc; ag[i].firstarc=p;//结点j插入到第i个链表 p=(edgenode*)malloc(sizeof(edgenode));//生成临界点序号为i的表结点 p->adjvex=i; p->link=ag[j].firstarc; ag[j].firstarc=p;//结点i插入到第j个链表的头部

数据流图与数据字典的一个经典例子

系统的数据流图与数据字典实例 作为示例,为简单起见,我们只考虑人机分工。此处的数据流图是计算机化的帐务处理系统中涉及到计算机部分的数据流图,人工完成的部分将不做反应。例如:计算机没有能力审核原始凭证、填制记账凭证,这些工作必须由人来完成,因此进入系统(系统的自动化部分)的应该是记账凭证而不是原始凭证。银行对帐单仍然是系统的输入数据流,原有的输出数据流系统也必须提供。 图1 系统的顶层数据流图 图2 系统的第一层分解图 记账凭证进入计算机系统需要进行输入操作,而且由于记账凭证本身可能出错,或输入过程中可能发生错误,因此系统必须提供对已输入的记账凭证的修改功能和审核功能,审核通过的记账凭证才能够记账。据此,对“凭证处理”分解得到第二层分解图,该分解图由凭证输入、凭证修改和凭证审核三个处理构成。如果记账凭证是由操作人员直接根据原始凭证

用计算机填制,则凭证处理还应该包含一个打印记账凭证的处理。 图3 系统第二层分解图之一(图1)在系统中,登帐处理由计算机完成,其分解的流程图与原来一致。 图4 系统第二层分解图之二(图2)

图5系统第二层分解图之三(图3) 图6 系统第二层分解图之四(图4) 8.1.3 数据字典 数据字典的作用是对数据流图中的各种成分进行详细说明,作为数据流图的细节补充,和数据流图一起构成完整的系统需求模型。数据字典一般应包括对数据项,数据结构、数据存储和数据处理的说明。以下列出本系统的主要数据字典条目。 1. 数据项条目 数据项编号:D01-001 数据项名称:凭证编号 别名:凭证流水号 符号名:PZBH 数据类型:数值型 长度:4 取值范围:1~9999 其余略。 2. 数据结构条目

无向图,有向图

无向图 【定义】 一个无向图(undirected graph)是一个二元组,其中: 1.V是非空集合,称为顶点集。 2.E是V中元素构成的无序二元组的集合,称为边集。 【解释】 直观来说,若一个图中每条边都是无方向的,则称为无向图。 (1)无向边的表示 无向图中的边均是顶点的无序对,无序对通常用圆括号表示。 【例】无序对(vi,vj)和(vj,vi)表示同一条边。 (2)无向图的表示 【例】下面(b)图中的G2和(c)图中的G3均是无向图,它们的顶点集和边集分别为:V(G2)={v1,v2,v3,v4} E(G2)={(vl,v2),(v1,v3),(v1,v4),(v2,v3),(v2,v4),(v3,v4)} V(G3)={v1,v2,v3,v4,v5,v6,v7} E(G3)={(v1,v2),(vl,v3),(v2,v4),(v2,v5),(v3,v6),(v3,v7)} 注意: 在以下讨论中,不考虑顶点到其自身的边。即若(v1,v2)或是E(G)中的一条边,则要求v1≠v2。此外,不允许一条边在图中重复出现,即只讨论简单的图。 3.图G的顶点数n和边数e的关系 (1)若G是无向图,则0≤e≤n(n-1)/2 恰有n(n-1)/2条边的无向图称无向完全图(Undirected Complete Graph) (2)若G是有向图,则0≤e≤n(n-1)。 恰有n(n-1)条边的有向图称为有向完全图(Directed Complete Graph)。 注意: 完全图具有最多的边数。任意一对顶点间均有边相连。 【例】上面(b)图的G2就是具有4个顶点的无向完全图。 有向图 【定义】 有向图是一个二元组,其中 1.V是非空集合,称为顶点集。 2.E是V×V的子集,称为弧集。 【解释】 直观来说,若图中的每条边都是有方向的,则称为有向图。有向图中的边是由两个顶点组成的有序对,有序对通常用尖括号表示,如表示一条有向边,其中vi是边的始点,vj是边的终点。代表两条不同的有向边。 【完全有向图】 有n个顶点的有向图有n(n-1)条边,则此图称为完全有向图。

算法与数据结构课程设计(有向图,无向图,有向网,无向网)

算法与数据结构课程设计报告 系(院):计算机科学学院 专业班级:教技1001班 姓名:戴征淼 学号: 201003886 指导教师:詹泽梅 设计时间:2012.6.16 - 2012.6.24 设计地点:4号楼2号机房

目录 一、设计方案及实现过程******************第3页 二、实现代码***********************************第4页 三、测试******************************************第19页 四、难点与收获********************************第21页

一、设计方案及实现过程 这次课程设计要求实现无向图、有向图、无向网以及有向网的一些基本操作以及应用,大体的方案是先进入界面后,选择无向图、有向图、无向网、无向网中的一个,然后创建相应的图或者网,创建好后,在此基础上选择进行相关的操作,具体的函数放在main函数前面,通过多次函数调用已达到具体操作的实现。 流程图如下: 进入选择界 面1 无向图创建无向图 1 创建无向图 的邻接矩阵 函数调用 2 创建无向图 的邻接表 函数调用 3无向图的深 度优先遍历 函数调用 4 无向图的广 度优先遍历 函数调用 5 返回选择主 界面 2 有向图 3 无向网 4 有向网 5 退出 有向图、无向网、有向网的操作和无向图类似, 在这里不一一列举。

二、实现代码 #include # include # define maxlen 10 # define large 999 # define true 1 # define false 0 # define ok 1 # define error 0 # define overflow -2 # define null 0 typedef int status; #include #include #include #include #include using namespace std; #define MAX_VERTEX_NUM 20 #define MAX 1000 typedef struct{ int a[maxlen],b[maxlen],h[maxlen]; char vexs[maxlen]; int vexnum,arcnum; int kind; int arcs[maxlen][maxlen]; }graph; typedef struct node{ int adjvex; int info; struct node *next; }edgenode; typedef struct{ int id; char data; edgenode *link; }vexnode; typedef struct{ vexnode adjs[maxlen];

相关文档
最新文档