文章
6
粉丝
0
获赞
1
访问
183
(1) 首先, 遍历领接矩阵统计出各个顶点的入度, 存入一维数组。然后遍历这个一维数组, 找入度为0的顶点, 如果能找到大于1个或找不到的话, 说明不存在唯一的括扑序列或不存在括扑序列, 直接返回0即可。将这个顶点的访问信息设为已访问, 遍历这个顶点的所有出边, 然后将领接顶点的入度减一, 再重复之前查找入度为0的顶点步骤。直到遍历完所有顶点后, 返回1, 表示存在唯一括扑序列。
(2)
typedef struct //图的类型定义
{
int numVertices, numEdges; //图的顶点数和有向边数
char verticesList[MAXV]; //项点表,MAXV为以定义常量
int Edge[MAXV][MAXV]; //知接矩阵
}MGraph;
int uniquely(MGraph G) {
int n = G.numVertices; // 保存顶点数
int visit[n];
int d[n];
for (int i = 0;i < n;++i) { // 遍历记录顶点入度信息
for (int j = 0;j < n;++j) {
if (G.Edge[i][j] == 1) {
d[i]++;
d[j]++;
}
}
}
for (int i = 0;i < n;++i) {
int c = 0;
int t = -1;
for (int j = 0;j < n;++j) { // 遍历, 看看哪个没访问过的顶点入度为0
if (d[j] == 0 && visit[j] != 1) {
c++;
t = j;
}
}
if (c != 1) { // 如果入度为0的顶点数量不是一个, 就不存在唯一的括扑排序
return 0;
}
if (t != -1) { // 得到唯一的入度为0的顶点
visit[t] = 1...
登录后发布评论
暂无评论,来抢沙发