拓扑排序的C语言的源代码:
# include # include # define M 30 # define PR printf # define SC scanf
typedef struct ArcNode {int adjvex; struct ArcNode *nextarc; }ArcNode,*Anode;
typedef struct VexNode {int data; int indegree; struct ArcNode *firstarc; }VexNode,*Vnode,G[M];
typedef struct Lnode {int data; struct Lnode * next; } Lnode,*Link; Link L=NULL;
void Push(int r) { Link q; q=(Link)malloc(sizeof(Lnode)); q->data=r; q->next=L; L=q; }
char Pop(int r) { Link p; if (L!=NULL) {p=L;L=L->next;r=p->data; free(p); return r;} else return -1; }
void CreatGraph(G g,int n) { int i,j; Vnode q; Anode p; for(i=1;i<=n;i++) {g[i].data=i; g[i].indegree=0; g[i].firstarc=NULL; } printf("input the edge:i,j\n"); scanf("%d,%d",&i,&j); while(i!=0) { p=(Anode)malloc(sizeof(ArcNode)); p->adjvex=j; p->nextarc=g[i].firstarc; g[i].firstarc=p; g[j].indegree++; scanf("%d,%d",&i,&j); } }
void PrintGraph(G g,int n) {int i; Anode p; PR("\nAdjacency List Graph:\n"); printf("vexnode indgree adjvex\n"); for(i=1;i<=n;i++) {PR("vex[%d]:[%d]",g[i].data,g[i].indegree); p=g[i].firstarc; while(p) {PR("-->[%d]",p->adjvex); p=p->nextarc;} PR("\n"); } }
int TopSort(G g,int n) {Anode p; int i,k,count=0; for(i=1;i<=n;i++) if(g[i].indegree==0) Push(i); PR("\nAfter the TopSort\n:"); while(L) {i=Pop(i); PR("%d\n",g[i].data);count++; for(p=g[i].firstarc; p; p=p->nextarc) {k=p->adjvex; if((--g[k].indegree)==0) Push(k);} } if(count}
void main() {G g; int n; clrscr(); PR("Input the numbers of node:"); SC("%d",&n); CreatGraph(g,n); PrintGraph(g,n); TopSort(g,n); }
大企鹅,以后我们就可以联系了! 
|