HDU1285确定比赛名次 + 拓扑排序

来源:互联网 发布:sql数据脱敏处理方法 编辑:程序博客网 时间:2024/05/17 03:01

原题连接:http://acm.hdu.edu.cn/showproblem.php?pid=1285

#include<stdio.h>#include<stdlib.h>#define Max 510typedef struct vert{int num;           //结点编号struct vert* next;}G_v;typedef struct node{int InDgree,OutDgree;            //出度和入度G_v* next;}G_n;G_n g[Max];void Init(){int i;for(i = 1;i < Max;i ++){g[i].InDgree = g[i].OutDgree = 0;g[i].next = NULL;}}void CreateGraph(int x,int y)            //将y结点连到x节点上。{G_v* tmp = g[x].next;G_v* q = (G_v*)malloc(sizeof(G_v));q->next = NULL;q->num = y;if(tmp == NULL) g[x].next = q;else{while(tmp->next!=NULL)tmp = tmp->next;tmp->next = q;}g[x].OutDgree ++;g[y].InDgree ++;}void Top(int N){G_v *tmp;int i,count = 1;for(i = 1;i <= N;i ++){if(g[i].InDgree == 0){if(count == N)printf("%d\n",i);elseprintf("%d ",i);tmp = g[i].next;while(tmp){g[tmp->num].InDgree --;tmp = tmp->next;}i = 0;            //返回重新检验所有点g[i].InDgree = --;           //将已经输出的点排除count++;}}}int main(void){int N,M,x,y;Init();while(scanf("%d %d",&N,&M)!=EOF){Init();for(int i = 1;i <= M;i ++){scanf("%d %d",&x,&y);CreateGraph(x,y);}Top(N);}}


0 0
原创粉丝点击