1 / 19
文档名称:

图论算法C学习教案.pptx

格式:pptx   大小:181KB   页数:19页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

图论算法C学习教案.pptx

上传人:wz_198613 2021/11/7 文件大小:181 KB

下载得到文件列表

图论算法C学习教案.pptx

相关文档

文档介绍

文档介绍:会计学
1
图论(tú lùn)算法C
第一页,共19页。
第一节 基本概念
一、什么是图?
  很简单,点用边连起来就叫做图,严格意义上讲,图是一种(yī zhǒnɡ)数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。
二、图的一些定义和概念
(a)有向图:图的边有方向,只能按箭头方向从一点到另一点。(a)就是一个有向图。
(b)无向图:图的边没有方向,可以双向。(b)就是一个无向图。
结点的度:无向图中与结点相连的边的数目,称为结点的度。
结点的入度:在有向图中,以这个结点为终点的有向边的数目。
结点的出度:在有向图中,以这个结点为起点的有向边的数目。
权值:边的“费用”,可以形象地理解为边的长度。
连通:如果图中结点U,V之间存在一条从U通过若干条边、点到达V的通路,则称U、V 是连通的。
回路:起点和终点相同的路径,称为回路,或“环”。
完全图:一个n 阶的完全无向图含有n*(n-1)/2 条边;一个n 阶的完全有向图含有n*(n-1)条边;
    稠密图:一个边数接近完全图的图。
    稀疏图:一个边数远远少于完全图的图。
    
强连通分量:有向图中任意两点都连通的最大子图。右图中,1-2-5构成一个强连通分量。特殊地,单个点也算一个强连通分量,所以右图有三个强连通分量:1-2-5,4,3。
1
2
3
4
5
(a)
1
2
3
4
5
(b)
1
2
3
4
5
第1页/共19页
第二页,共19页。
三、图的存储结构
定义int G[101][101];
G[i][j]的值,表示从点i到点j的边的权值,定义如下:
  上图中的3个图对应(duìyìng)的邻接矩阵分别如下:
   0 1 1 1 0 1 1 ∞ 5 8 ∞ 3
G(A)= 1 0 1 1 G(B)= 0 0 1 5 ∞ 2 ∞ 6
   1 1 0 0 0 1 0 G(C)= 8 2 ∞ 10 4
   1 1 0 0 ∞ ∞ 10 ∞ 11
   3 6 4 11 ∞
第2页/共19页
第三页,共19页。
下面(xià mian)是建立图的邻接矩阵的参考程序段:
#include<iostream>
using namespace std;
int i,j,k,e,n;
double g[101][101];
double w;
int main()
{
int i,j;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
g[i][j] = 0x7fffffff(赋一个超大值); //初始化,对于不带权的图g[i][j]=0,表示没有边连通。这里用0x7fffffff代替无穷大。
cin >> e;
for (k = 1; k <= e; k++)
{
cin >> i >> j >> w; //读入两个顶点序号及权值
g[i][j] = w; //对于不带权的图g[i][j]=1
g[j][i] = w; //无向图的对称性,如果是有向图则不要有这句!
}
…………
return 0;
}
建立邻接矩阵时,有两个小技巧:
  初始化数组大可不必使用两重for循环。
  1)  如果是int数组,采用memset(g, 0x7f, sizeof(g))可全部初始化为一个很大的数(略小于0x7fffffff),使用memset(g, 0, sizeof(g)),全部清为0,使用memset(g, 0xaf, sizeof(g)),全部初始化为一个很小的数。