例子
算法
#define Black 2
#define Gray 1
#define White 0
#define Infinite -1
#define NIL -1
struct map{
int d;
int f;
int color;
int parent;
} vertix[100];
int time;
void DSF(int a[100][100],int n){
int i;
for(i = 0;i<n;i++){
vertix[i].color = White;
vertix[i].parent = NIL;
}
time = 0;
for(i = 0;i<n;i++)
if(vertix[i] == White)
DSFvisit(a,n,i);
}
void DSFvisit(int a[100][100],int n,int num){
int i;
vertix[num] = Gray;
time++;
vertix[num].d = time;
for(i = 0;i<n;i++)
if(a[num][i])
if(vertix[i].color == White){
vertix[i].parent = num;
DSFvisit(a,n,i);
}
time++;
vertix[num].f = time;
vertix[num].color = Black;
}
struct dag{
struct map a;
struct *next;
};
struct dag* Topologicalsort(struct map vertix[],int n){
int i;
struct dag *head,*tail,*p;
quicksort(vertix,n);//quciksort according to vertix[i].f by decrease order
head = tail = NULL;
head = (struct dag*)malloc(sizeof(struct dag));
head->next =NULL;
for(i = 0;i<n;i++){
p = (struct dag*)malloc(sizeof(struct dag));
p->a = vertix[i];
p->next = NULL;
if(head->next == NULL)
head->next = p;
else tail->next = p;
tail = p;
}
return head;
}