- 作者:zhaozj
- 发表时间:2020-12-23 10:39
- 来源:未知
拓扑排序的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);}
大企鹅,以后我们就可以联系了!