这里的邻接表建图采用的是头接法…
#include<stdio.h>
#include<stdlib.h>
#define N 20
int k;int visit[N];
typedef struct node{
int ver;
struct node*next;
}VexNode;
struct Adj{
VexNode*next;
};
void InitMap(Adj adj[],int numN)
{
for(int i=1;i<=numN;i++)
adj[i].next=NULL;
}
void CreatMap(Adj adj[],int numB)
{
for(int i=0;i<numB;i++)
{
int a,b;
scanf("%d%d",&a,&b);
VexNode*q;
q=(VexNode*)malloc(sizeof(VexNode));
q->ver=b;
q->next=adj[a].next;
adj[a].next=q;
}
}
void top_sort_recur(Adj adj[],int start,int ts[])
{
visit[start]=1;
VexNode*p=adj[start].next;
while(p!=NULL)
{
int v=p->ver;
if(!visit[v])
top_sort_recur(adj,v,ts);
p=p->next;
}
ts[k]=start;
k-=1;
}
void top_sort(Adj adj[],int ts[],int numN)
{
k=numN;
for(int i=1;i<=numN;i++)
visit[i]=0;
for(int i=1;i<=numN;i++)
if(!visit[i])
top_sort_recur(adj,i,ts);
}
int main()
{
Adj adj[N];int numN,numB;int top[N];
scanf("%d%d",&numN,&numB);
InitMap(adj,numN);
CreatMap(adj,numB);
top_sort(adj,top,numN);
for(int i=numN;i>0;i--)
printf("%d ",top[i]);
return 0;
}