- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、定义与术语
图:无序数据结构
基本构成: 1.边集( Edge):a. 有向图,有向边 <v, w> ,弧,弧头,弧尾,权值
b. 无向图,无向边 (v, w),权值
2.顶点集( Vertices): a. 无向图:度 (TD(v))
b. 有向图:出度 (ID(v)) ,入度 (OD(v)) ,度 (TD(v) = ID(v) + OD(v))
无向完全图: n 个顶点, n(n
1) 条边
2
有向完全图: n 个顶点, n(n
1) 条边
网:带权图
连通分量:无向图中的极大连通子图(多个)
,无向完全图的连通分量就是本身(一个)
强连通分量:有向图中的极大连通子图,其中
vi 到 vj 以及 v j 到 vi 都有路径
生成树:图的极小连通子图,含有图的全部
n 个顶点,只有 n-1 条边,少一条则不能连通,
多一条则形成回路
生成森林:不完全图中的各个连通分量的生成树,构成图的生成森林
二、存储结构
顶点:可采用链表或数组存储顶点列表,一般采用链表存储
边: 1. 邻接矩阵(数组)
a. 无向图:对称阵,可采用矩阵压缩存储方式。
A[i][j] = 0 表示 vi
和 vj 没有连接;
A[i][j] = 1 表示 vi 和 v j
有边连接;第
i 行的和表示顶点
vi 的度
b. 有向图:不对称阵。 A[ i ][ j ] wi , j 表示顶点 vi
到 v j 的有向弧的权值; A[ i][ j ]
表示表示顶点 vi 到 vj 没有弧连接或者
i = j
邻接表(链表,有向无向都可用)
边结点: adjvex (邻接点), nextarc(下一条边), info (权值)
顶点结点: data(顶点数据) , firstarc (第一条边)
3. 十字链表( Othogonal List )
弧结点: tailvex(弧尾结点),headvex(弧头结点),tlink (弧尾相同的下一条弧) ,hlink
(弧头相同的下一条弧) , info (权值)
顶点结点: data(顶点数据) , firstin (第一条入弧) ,firstout (第一条出弧)
三、图的遍历(每个顶点只被访问一次)
深度优先遍历(类似树的先根遍历)
基本思想: 假设初始状态是图中所有顶点未曾被访问, 则深度优先搜索可从图中某个顶
点 v 出发, 访问此结点, 然后依次从 v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和 v 有路径相通的顶点都被访问到; 若此时图中尚有顶点未被访问(非连通图) ,则另选图中一个未曾被访问的顶点作起始点,重
复上述过程,直至图中所有顶点都被访问到为止。
代码:
void DFS(Graph& G , int v, bool first, bool visited[]) {
visit(getValue(G , v));
visited[v] = true;
int = getFirstNeighbor(G , v);
while(w != -1) {
if(!visited[w]) DFS(G , w, visited);
w = getNextNeighbor(G , v, w);
}
}
广度优先搜索(类似于树的层次遍历)
基本思想: 假设从图中某顶点 v 出发,在访问了 v 之后依次访问 v 的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点
的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的
顶点的邻接点都被访问到。若此时图中尚有顶点未被访问(非连通图) ,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问
到为止。
代码:
viod BFS(Graph& G , int v) {
int i, w, n = G.vexnum;
bool* visited = new bool[n];
for(i = 0; i < n; i++) visited[i] = false;
visit(getValue(G , v));
visited[v] = true;
Queue Q; initQueue(Q); enQueue(Q, v);
while (!isEmpty(Q)) {
deQueue(Q, v);
w = getFirstNeighbor(G , v);
while (w != -1) {
if (!visited[w]) {
visit(getValue(G , w));
enQueue(Q, w);
}
w = getNextNeighbor(G , v, w);
}
}
delete[] visited;
}
四、图的连通性问题(无向图)
1. 深
您可能关注的文档
- 数学教师作文500字.doc
- 数学教师工作反思.doc
- 数学教育工作反思.doc
- 数学比大小教学反思.doc
- 数学语言表达能力培养总结资料.doc
- 数学运算快速计算技巧.doc
- 数据库原理及应用总结归纳——崔巍方案后上机实验.doc
- 数据库实验报告课程学生选课系统数据库SQLSERVER包含ER图与实现.doc
- 数据结构复习题第5章答案2014616.doc
- 数据结构实验答案1.doc
- 2022年部编人教版九年级数学上册期末考试题及答案【最新】.doc
- 人教部编版四年级数学(上册)期末质量分析卷及答案.doc
- 人教版一年级科学下册期中试卷及答案【一套】.doc
- 2023年人教版九年级地理(上册)期末考试卷及答案.doc
- 2022-2023年人教版七年级数学下册期中测试卷及答案【全面】.doc
- 苏教版五年级《数学》下册全单元测试题【附答案】.docx
- 人教版三年级语文上册期末考试卷及答案【全面】.doc
- 部编版五年级数学下册期中考试题及答案【完美版】.doc
- 2022年部编版六年级数学上册期末试卷加答案.doc
- 2021—2022年部编人教版三年级语文上册期末试卷(参考答案).doc
文档评论(0)