有向图是否有环(邻接表) 拓扑排序 法
来源:互联网 发布:淘宝合并购物车 编辑:程序博客网 时间:2024/06/09 22:06
建图 与前面类似(邻接表)
图相关结构:
#define MAXVEX 100typedef char VertexType;typedef struct QNode {int front, rear;int data[MAXVEX];int size;}Queue;typedef struct ENode {int ivex;//顶点 索引struct ENode* next;}ENode;typedef struct VNode {VertexType data; // 顶点 信息ENode* first_edge;}VNode;typedef struct Graph {VNode vex[MAXVEX];int vex_num, edge_num;}Graph;
核心代码:
int has_circle(Graph g){Queue q;init_queue(&q);int i, j, index;index = 0;int* ins;//记录 各顶点入度char* topos;//记录排序结果int num;num = g.vex_num;ENode* node;ins = (int*)malloc(sizeof(int)*num);topos = (char*)malloc(sizeof(char)*num);memset(ins, 0, sizeof(int)*num);memset(topos, 0, sizeof(char));for (i = 0; i < g.vex_num; i++) {//算入度 过程node = g.vex[i].first_edge;while (node != NULL) {ins[node->ivex]++;node = node->next;}}for (i = 0; i < g.vex_num; i++) {if (ins[i] == 0) //把所有入度为0的顶点入队{enqueue(i, &q);}}while (!is_empty(q)) {j = q_front(q);topos[index++] = g.vex[j].data;//出队 记录进排序结果里dequeue(&q);node = g.vex[j].first_edge;while (node != NULL) {ins[node->ivex]--;if (ins[node->ivex] == 0) {enqueue(node->ivex, &q);}node = node->next;}}if (index != g.vex_num)//索引 记录 入队顶点数目 如果无环 则应该相等return 1;elsereturn 0;}
阅读全文
0 0
- 有向图是否有环(邻接表) 拓扑排序 法
- ACM 模板--邻接表 有向图 拓扑排序
- 判断有向图是否有环及拓扑排序
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- HDU1285基于有向图邻接表的优先队列的拓扑排序
- 数据结构上机实验--有向图邻接表的建立,深度广度搜索及拓扑排序
- 判断有向图是否存在环的2种方法(深度遍历,拓扑排序)
- UVa 1572 拓扑排序 判断有向图是否有环
- 判断有向图是否有环之拓扑排序-LeetCode 207. Course Schedule
- 有向图--拓扑排序
- 判断有向图是否存在回路—拓扑排序
- 拓扑排序(判断是否是有向无环图)
- 图中是否有环-->拓扑排序
- 判断邻接表存储的有向图是否有环
- 邻接表 有向图 是否有环 C实现 (dfs
- 有向图-邻接表
- 会场预约
- 递归转动态规划
- ContextLoaderListener作用详解
- java常用类的方法总结---String类
- HDU 1716 排列2 + poj 1833
- 有向图是否有环(邻接表) 拓扑排序 法
- 训练总结 8.5
- c++动态内存管理
- Currency Exchange (弗洛伊德)
- HDU
- JumpServer最新版安装
- 链表基础(创建、插入、删除)
- Python的动态有哪些类型?
- geoserver切片出现HTTP ERROR 403解决