- 1
- 0
- 约2.42千字
- 约 7页
- 2023-08-03 发布于辽宁
- 举报
数据结构课程设计---
问题:选择合适的结构表示图,在此基础上实现拓扑排序算法。
要求:对所设计的图的结构,提供必要的基本功能。
1 .问题描述
对一个有向无环图(Directed Acyclic Graph简称DAG ) G进行拓扑排序
(Topological Sort ),是将G中所有顶点排成一个线性序列,使得对图中任意一对 顶点i和j,若<i,j> e E(G),则i在线性序列中出现在j之前。通常将这样的线性序 列称为满足拓扑次序(Topolgical Order )的序列,简称拓扑序列。若将图中顶点按 拓扑次序排成一行,则图中所有的有向边均是从左指向右的。显然,若图中存在有向 环,则不可能使顶点满足拓扑次序。
一个有向图经常用来说明事件之间的先后关系。通常将事件表示为顶点,而事件 间的依赖关系表示为有向边。若从顶点i到顶点j有一条有向路径,则i是j的前驱, j是i的后继。若(i,j )是一条边<i,j>,则i是j的直接前驱;j是i的直接后继。 一个DAG的拓扑序列通常表示某种方案切实可行。
拓扑排序方法步骤:
从有向图上选择一个没有入度的节点并输出。
从图中删去改点并删去从该顶点发出的全部有向边。
重复上述两步,直到图中不再存在没有前驱的顶点为止。
2.算法设计
设计本题的算法的构思如下:
采用邻接矩阵作为有向图的存储结构,且需要编写计算顶点入度的函数
Cal_indegree ()。删除入度为零的顶点,及以它为起始点的边的操作,并将终点 的入度减一来实现。避免重复检测入度为零的顶点,需另设一临时变量t存储所有 入度为零的顶点。当有向图上某一顶点入度为零,则将该顶点赋给t,然后输出t, 并将与该顶点有关的顶点的入度减一,若减一后,入度为零,则继续重复上述步骤。
操作的结果:
全部顶点被输出,图中没有回路。
未输出全部顶点,剩余顶点均有前驱,图中有回路。
主要数据结构:图的邻接矩阵存储形式;
(4)总体设计流程:
3.程序实现
完整程序的源代码如下:
#includestdio.h
#includestdlib.h
#includeiostream.h
#define MaxVertexNum 50 /最大顶点数
typedef struct
int edges[MaxVertexNum][MaxVertexNum];/邻接矩阵
int vexnum;//图中当前的顶点数
}DAGraph;
void InputGraph( DAGraph *g )
{
int n,i,j;
cout请输入顶点个数,数的范围是[1..”MaxVertexNum”]:endl;
cinn;
if( n1|| nMaxVertexNum )
{
cout超出范围endl;
exit(1);
}
g-vexnum=n;
for( i=0;in;i++ )
for(j=0;jn;j++ )
g-edges[i][j]=0;//邻接矩阵初始化
cout请输入边的起始点和终点他们须在[0..n-1]内,以-1-1结束vvendl;
do{
cinij;
if( i==-1j==-1 )
break;
if( i0lli=nllj0llj=n )
{
cout错误:i 和 j 必须在[0..”vvn-1”],请重试!”endl;
continue;
}
g-edges[i][j]=1;
}while(1);
}
void Cal_indegree( DAGraph *g,int indegree[])
{
int i,j;
for( i=0;ig-vexnum;i++ )
indegree[i]=0;//将起始点i的入度置为0
for( i=0;ig-vexnum;i++ )
for( j=0;jg-vexnum;j++ )
if( g-edges[i][j]==1 )
indegree[j]++;//将i,j终点 j 的入度加 1
}
void TopSort( DAGraph *g,int indegree[])
{
int t=-1,i,j,count=0;//count对输出的顶点数目计数,初值为0
for( i=0;ig-vexnum;i++ )
{
if( indegree[i]==0)
{
indegree[i]=t;//将入度为0的顶点i的入度置为-1,相当于从图中将其取出
t=i;//把 i赋给t,便于后面输出顶点i
}
}
〃以下开始拓扑排序
while(t!=-1 )//尚未遍历完该图
{
coutVt;
count++;//输出顶点i并计数
i=t;
t=indegree[t];
for( j=0;jg-vexnum;j++ )
{
if( g-edges[i][j]==1 )
indegree[j]--;//j的入度减1
您可能关注的文档
最近下载
- 第五单元 第三节 可视化分析数据 课件 粤教版(2025)信息科技四年级.pptx VIP
- 契税培训课件.pptx VIP
- 二甲基乙醇胺化学品安全技术说明书MSDS.docx VIP
- 标准图集-22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图-独立基础、条形基础、筏形基础、桩基础.pdf VIP
- 《3岁以下婴幼儿生活照护托育服务规范》(DB37T 4784—2024).pdf VIP
- 2025年安徽省中考数学试卷真题含答案.pdf VIP
- T /CNCA 128—2025 露天煤矿土石方剥离综合单价确定方法.pdf VIP
- 2025年南京交通职业技术学院单招英语2014-2024历年真题考点试卷摘选含答案解析.doc
- 人教英语八年级下册单词表默写(2026版).xlsx VIP
- 口述档案的收集与整理-.pdf VIP
原创力文档

文档评论(0)