图结构练习——判断给定图是否存在合法拓扑序列
来源:互联网 发布:董秘助手软件下载 编辑:程序博客网 时间:2024/06/10 09:30
图结构练习——判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
输入
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n<=10)
后面m行每行两个整数a b,表示从a到b有一条有向边。
输出
若给定有向图存在合法拓扑序列,则输出YES;否则输出NO。
示例输入
1 02 21 22 1
示例输出
YESNO
提示
来源
赵利强
示例程序
- 提交
- 状态
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 100typedef 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;}
0 0
- SDUT 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT2140_图结构练习——判断给定图是否存在合法拓扑序列(邻接表)
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
- sdut 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- web接口排队访问 子查询where条件字段搜索域 2016.08.17回顾
- 机器视觉自主学习规划
- 大型网站服务器的架构
- poj 2386 (Lake Counting)
- 【ArcGis】环境搭建,一次配置,终身无忧
- 图结构练习——判断给定图是否存在合法拓扑序列
- 修改于《用抛物线的点实现HTC Vive瞬移系统》,亲测可用
- 图结构练习——BFSDFS——判断可达性
- 华为上机题汇总(二十)
- 五大常用算法思想
- AndrewNG-MachineLearning-Week1
- Handle机制详解
- poj 1401Factorial
- ffmpeg 的编译选项