intuniquely(MGraph G){ int n = G.numVertices; // 初始化入度,初值为0 int indegree[n]; memset(indegree, 0, sizeof(indegree)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (G.Edge[i][j]) { indegree[j]++; } } }
int queue[n]; int front = 0, rear = 0; int count = 0; //拓扑排序执行次数 for (int i = 0; i < n; i++) { if (indegree[i] == 0) { // 入度为0的点入队 queue[rear++] = i; } if (rear - front > 1) return0; } // 队列非空 while (front < rear) { int x = queue[front++]; // 拓扑序列的长度和点的长度相同 count++; for (int j = 0; j < n; j++) { // 如果存在边,则对应的入度-- if (G.Edge[x][j]) { indegree[j]--; if (indegree[j] == 0) { queue[rear++] = j; } if (rear - front > 1) { return0; //序列不唯一 } } } } return count == n; }