RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
关于c语言的一些例子(给大企鹅的)
  • 作者: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);}

大企鹅,以后我们就可以联系了!