机试算法讲解: 第39题 DAG之QQ师徒关系
来源:互联网 发布:ahc官网扫码软件 编辑:程序博客网 时间:2024/06/11 09:44
/*问题:QQ群中师徒关系。判定是否存在有向无环图。输入:N(多少个结点),M(需要测试的关系) (2<=N,M<=100),接下来是M行,每一行是 x y,表示x是y的师傅,当N=0时,输入终止,数字时0,1,...,N-1输出:合法师徒为"YES",非法是"NO"思路:采用队列保存入度为0的节点,每找到一个,删除该节点和以该节点为弧尾的所有节点*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <queue>#include <vector>#define MAX 1000using namespace std;int main(int argc,char* argv[]){int n,m;int i;while(EOF!=scanf("%d %d",&n,&m)){if(0==n && 0==m){break;}vector<int> vecEdge[MAX];//用于建立单链表int inDegree[MAX];queue<int> queueDegree;//用于存放入度为0的结点//初始化入度为0for(i = 0 ; i < n ; i++){inDegree[i] = 0;}//获取输入信息int x,y;for(i = 0 ; i < m ; i++){scanf("%d %d",&x,&y);//对入度进行加1,同时建立链表关系inDegree[y]++;vecEdge[x].push_back(y);}//将入度为0的节点存入队列中queue<int> queInDegree;for(int i = 0 ; i < n ; i++){if(0==inDegree[i]){queInDegree.push(i);}}//遍历入度为0的节点,开始进行删除操作int iCnt = 0;//用于计数是否最终删除了n个节点while(!queInDegree.empty()){int iFront = queInDegree.front();//遍历该节点,将所有与之相关的节点的入度减1for(i = 0 ; i < vecEdge[iFront].size() ; i++){int iRel = vecEdge[iFront][i];inDegree[iRel]--;//如果减1后的节点的入度为0,则再将该节点放入队列中if(0==inDegree[iRel]){queInDegree.push(iRel);}}//在队列中弹出该节点queInDegree.pop();//删除该节点对应的单链表vecEdge[iFront].clear();iCnt++;}//如果删除了所有的节点,表明是有向无环图if(n==iCnt){printf("YES\n");}else{printf("NO\n");}}system("pause");getchar();return 0;}
0 0
- 机试算法讲解: 第39题 DAG之QQ师徒关系
- 机试算法讲解:第2题 结构体之快速排序
- 机试算法讲解: 第11题 贪心之猫鼠大战
- 机试算法讲解: 第13题 栈之括号匹配
- 机试算法讲解: 第33题 并查集之找小伙伴
- 机试算法讲解:第34题 并查集之求最短公路总长度
- 机试算法讲解: 第40题 暴力搜索之百鸡问题
- 机试算法讲解: 第41题 广度优先搜索之迷宫问题
- 机试算法讲解: 第42题 广度优先搜索之我该如何倒可乐
- 机试算法讲解: 第43题 递归之汉诺塔问题
- 机试算法讲解: 第44题 深度优先搜索之素数环问题
- 机试算法讲解: 第45题 深度优先搜索之寻找沙特石油存储区
- 机试算法讲解: 第46题 深度优先搜索之能否逃出魔掌
- 机试算法讲解:第47题 递推之N阶楼梯如何上楼
- 机试算法讲解: 第48题 递推之写信发错啦
- 机试算法讲解: 第49题 动态规划之最长递增子序列问题
- 机试算法讲解:第50题 动态规划之拦截导弹
- 机试算法讲解: 第51题 动态规划之最长公共子序列问题
- 深入分析Java线程中断机制
- 士兵杀敌(一)
- 二叉树的基本操作
- HDU 5338 ZZX and Permutations 线段树
- Permutations
- 机试算法讲解: 第39题 DAG之QQ师徒关系
- 【Swift】学习笔记(八)——类和结构体
- 数据块的操作 DataChunk
- JavaScript中的枚举类型
- ubuntu 常用命令大全
- UVa 232 Crossword Answers
- 黑马程序员——多线程知识总结1
- C语言-自定义函数,及其调用;函数返回值类型的自动转换,即其数量;
- 对LessonFour的再一遍