c编写 Topological Sort
来源:互联网 发布:package java 编辑:程序博客网 时间:2024/05/18 18:21
Topological Sort
Write a program to find the topological order in a digraph.
Format of functions:
bool TopSort( LGraph Graph, Vertex TopOrder[] );
where LGraph
is defined as the following:
typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; PtrToAdjVNode Next;};typedef struct Vnode{ PtrToAdjVNode FirstEdge;} AdjList[MaxVertexNum];typedef struct GNode *PtrToGNode;struct GNode{ int Nv; int Ne; AdjList G;};typedef PtrToGNode LGraph;
The topological order is supposed to be stored in TopOrder[]
whereTopOrder[i]
is the i
-th vertex in the resulting sequence. The topological sort cannot be successful if there is a cycle in the graph -- in that caseTopSort
must return false
; otherwise return true
.
Notice that the topological order might not be unique, but the judge's input guarantees the uniqueness of the result.
Sample program of judge:
#include <stdio.h>#include <stdlib.h>typedef enum {false, true} bool;#define MaxVertexNum 10 /* maximum number of vertices */typedef int Vertex; /* vertices are numbered from 0 to MaxVertexNum-1 */typedef struct AdjVNode *PtrToAdjVNode; struct AdjVNode{ Vertex AdjV; PtrToAdjVNode Next;};typedef struct Vnode{ PtrToAdjVNode FirstEdge;} AdjList[MaxVertexNum];typedef struct GNode *PtrToGNode;struct GNode{ int Nv; int Ne; AdjList G;};typedef PtrToGNode LGraph;LGraph ReadG(); /* details omitted */bool TopSort( LGraph Graph, Vertex TopOrder[] );int main(){ int i; Vertex TopOrder[MaxVertexNum]; LGraph G = ReadG(); if ( TopSort(G, TopOrder)==true ) for ( i=0; i<G->Nv; i++ ) printf("%d ", TopOrder[i]); else printf("ERROR"); printf("\n"); return 0;}/* Your function will be put here */
Sample Input 1 (for the graph shown in the figure):
5 71 04 32 12 03 24 14 2
Sample Output 1:
4 3 2 1 0
Sample Input 2 (for the graph shown in the figure):
5 80 31 04 32 12 03 24 14 2
Sample Output 2:
ERROR
代码如下:
bool TopSort(LGraph Graph,Vertex TopOrder[]){int counter=0;int Indegree[MaxVertexNum];int queue[MaxVertexNum];int head=0,tail=0;PtrToAdjVNode node;int i=0,j=0;for(i=0;i<MaxVertexNum;i++){TopOrder[i]=0;Indegree[i]=0;queue[i]=-1;}for(i=0;i<Graph->Nv;i++){node=Graph->G[i].FirstEdge;while(node!=NULL){Indegree[node->AdjV]++;node=node->Next;}}for(i=0;i<Graph->Nv;i++){if(Indegree[i]==0)queue[tail++]=i;}while(head!=tail){j=queue[head++];TopOrder[counter++]=j;node=Graph->G[j].FirstEdge;while(node!=NULL){Indegree[node->AdjV]--;if(Indegree[node->AdjV]==0){queue[tail++]=node->AdjV;}node=node->Next;}}if(counter!=Graph->Nv)return false;return true;}
0 0
- c编写 Topological Sort
- topological-sort
- Topological Sort
- Topological Sort
- Topological Sort
- Topological Sort-拓扑排序
- 拓扑排序(Topological Sort)
- 拓扑排序 Topological-sort
- Topological Sort Summary
- 拓扑排序 - Topological Sort
- Topological Sort拓扑排序
- 拓扑排序(Topological Sort)
- 拓扑排序(Topological Sort)
- 拓扑排序(topological-sort)
- 拓扑排序(topological sort)
- 拓扑排序(topological sort)
- FDS Week 8: Topological Sort
- 拓扑排序(Topological Sort)
- 【jzoj3630】【汕头市选2014】【分叉】【树形动态规划】
- c编写 Shortest Path [3]
- 通信算法之十六:循环卷积与线性卷积在通信系统中物理层基带中的应用
- Zeppelin使用心得
- [BCG库] CBCGPButton::SetFaceColor不能改变颜色的 解决方法
- c编写 Topological Sort
- Redis 待续
- MySQL 中NULL和空值的区别
- Fragment碎片化的使用
- java中的堆、栈和常量池
- 10.MATLAB方差分析
- Coin Test
- 26、C++在 cmd 中给编译过的 mian 函数的可执行文件传入参数
- 使用javadoc工具生成API文档