图结构练习——判断给定图是否存在合法拓扑序列
2016-08-18 17:32
363 查看
图结构练习——判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。输入
输入包含多组,每组格式如下。第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
输出
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。示例输入
1 0 2 2 1 2 2 1
示例输出
YES NO
提示
来源
赵利强示例程序
提交
状态
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct { int *base; int *top; } sq; typedef int Status; typedef struct VNode { int data; struct VNode *next; }VNode; typedef struct { int vexnum,arcnum; VNode *vertices[MAX]; }ALGraph; Status e,indgeree[MAX],n,m; Status CreatUDG(ALGraph *G) { int i,v1,v2; VNode *p; G->vexnum=n;G->arcnum=m; for(i=1;i<=G->vexnum;i++) { G->vertices[i]=(VNode *)malloc(sizeof(VNode)); G->vertices[i]->next=NULL; } for(i=1;i<=G->arcnum;i++) { scanf("%d%d",&v1,&v2); p=(VNode *)malloc(sizeof(VNode)); p->data=v2; p->next=G->vertices[v1]->next; G->vertices[v1]->next=p; } return 1; } void FindInDgeree(ALGraph *G) { int i,k; VNode *p; for(i=1;i<=G->vexnum;i++) { for(p=G->vertices[i]->next;p;p=p->next) { k=p->data; indgeree[k]++; } } } int InitStack(sq *s) { s->base=(int *)malloc(MAX*sizeof(int)); if(!s->base)exit(-1); s->top=s->base; return 1; } int Push(sq *s,int e) { *s->top++=e; return 1; } int Pop(sq *s) { e=*--s->top; return 1; } int StackEmpty(sq *s) { if(s->base==s->top)return 1; else return 0; } Status TopologicalSort(ALGraph *G) { sq S; int i,k; VNode *p; FindInDgeree(G); InitStack(&S); for(i=1;i<=G->vexnum;i++) if(!indgeree[i])Push(&S,i); int count=0; while(!StackEmpty(&S)) { Pop(&S); count++; for(p=G->vertices[e]->next;p;p=p->next) { k=p->data; if(!(--indgeree[k]))Push(&S,k); } } if(count<G->vexnum)printf("NO\n"); else printf("YES\n"); return 1; } int main() { ALGraph G; while(scanf("%d%d",&n,&m)!=EOF) { memset(indgeree,0,sizeof(indgeree)); CreatUDG(&G); TopologicalSort(&G); } return 0; }
相关文章推荐
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT2140_图结构练习——判断给定图是否存在合法拓扑序列(邻接表)
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列(拓扑排序判断环)
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)
- SDUT2140图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列