文章
15
粉丝
0
获赞
6
访问
859
你的答案:
(1) 首先由题意可得,G一定是一个AOV网,因此一定有拓扑序列;若G中存在两条及以上独立的链(例如1->2->4与3->5),那么G的拓扑排序序列一定不唯一,此时在初始状态下必然会出现两个及以上入度为0的点,因此需要先检查这个情况;若G中仅有一条链,某个顶点的入度或出度>1,那么G中就不存在唯一的拓扑序列,又因为G是用邻接矩阵存储的,故可以检查每个顶点的入度与出度,若某个值大于1,则返回0,但是检查入度的操作可以放到前面去做,即之前检查是否有两个及以上入度为0的顶点或一个入度大于2的顶点,之后再单独检查出度;前面全部检查完没有问题,则返回1。时间复杂度为O(|V|^2)与空间复杂度为O(1)。
(2)
// 算法主体
int solution(MGraph G) {
int zeroInDegreeCount = 0; // 记录无入度顶点的数量
for (int i = 0; i < G.numVertices; i++) {
int inDegree = 0; // 顶点i的入度
for (int j = 0; j < G.numVertices; j++) {
if (G.Edge[j][i] == 1) { // j到i有一条有向边,入度+1
inDegree++;
if (inDegree > 1) // 如果入度 > 1,则返回0
&...
登录后发布评论
暂无评论,来抢沙发